- ·上一篇文章:C#不允许声明函数体内的static变量原因
- ·下一篇文章:C# 数据库访问通用类 (ADO.NET)
DotNet前台代码绑定后台变量各种方法
另外,这里所说的后台变量是泛指的,包括如下:
成员变量
方法或属性的返回值 
表达式,也就是所有后台能够执行的代码,运行后所得到的值(也就是直接将后台代码写在前台代码中,记得使用完全限定名或在后台中using相关namespace)
数据集合
后台变量有一些约束条件,需要满足:
(1)变量修饰符要求。变量是静态或者实例字段均可。对于代码隐藏模式的ASP.NET,以上的所述的变量必须为public或protected类型(因为是基类与派生类的关系),private或者internal都不行,而代码嵌入模式则任何修饰符的变量均可访问(一个类内部的关系)。
(2)变量类型要求。由于前台属性一般是字符串类型,而JavaScript基本类型也就是字符串型、数字型、布尔型,因此对应的变量应该也是这几种方式,其余类型如果不被支持(如复杂类型、数组、引用类型等),前台获取的就是调用了变量的ToString()方法所得到的字符串。因此,在绑定时,要根据情况看是否能进行隐式类型转换,必要时还要用相关函数来强制转换,以保证前台可以获得正确的值。当然,对于数据绑定类控件,它的有些属性可以为数据集合,但这时的绑定只能通过下面第二种方式才被支持。
以上是一些概念和基本约束,这些都是两种方式都应该满足的,下面具体介绍两种方式,来实现前台代码中(以下称为代码块)绑定后台变量的功能。
一. <
%= str%>
此种方式其实是ASP 时代就支持的,ASP 通过包含在 <
% 和 %>
中的表达式将执行结果输出到客户浏览器 , 如:<
% =test %>
就是将变量test的值发送到客户浏览器中。在ASP.NET中,这个表达式依然可以使用,并可以出现在前台代码的上述三个位置,但是要注意,除了上述的一般性约束外,对于控件属性,还必须是绑定到非服务器端控件的属性。另外,它只能绑定上面讲的前三种变量类型,不支持绑定数据集合。例子如下:
后台代码:
以下为引用的内容:
public partial class WebForm2 : System.Web.UI.Page
 
 
{
 
 
 
 
 
 
public string GetVariableStr
//注意变量的修饰符
 
 
 
 
 
 
protected void Page_Load(object sender, EventArgs e)
 
 
 
 
 
 
{
 
 
 
 
 
 
 
 
 
 
if (!IsPostBack)
 
 
 
 
 
 
 
 
 
 
{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
GetVariableStr = "hello world from variable"
 
 
 
 
 
 
 
 
 
 
}
 
 
 
 
 
 
}
 
 
 
 
 
 
protected string GetFunctionStr()//注意返回值的修饰符
 
 
 
 
 
 
{
 
 
 
 
 
 
 
 
 
 
return "hello world from Function"
 
 
 
 
 
 
}
 
 
}
 
前台代码:
以下为引用的内容:
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
 
 
 
<
title>
<
/title>
 
 
 
<
script type="text/javascript">
 
 
 
 
 
 
 
function fun()
{
 
 
 
 
 
 
 
 
 
 
 
var str = '<
%= DateTime.Now %>
'
 
 
 
 
 
 
 
 
 
 
 
//前台位置1,绑定的是第三种变量类型(也是第二种方式,?因为Now是个属性)
 
 
 
 
 
 
 
 
 
 
 
alert(str)
 
 
 
 
 
 
 
}
 
 
 
<
/script>
<
/head>
<
body >
 
 
 
<
form id="form1" runat="server">
 
 
 
 
 
 
 
 
 
<
div>
 
 
 
 
 
 
 
 
 
 
 
 
<
input type="text" value="<
%= GetVariableStr %>
" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<
%--前台位置2,绑定的是成员变量--%>
 
 
 
 
 
 
 
 
 
 
 
 
"<
%= GetFunctionStr() %>
"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<
%--前台位置3,绑定的是一个方法的返回值>
--%>
 
 
 
 
 
 
 
<
/div>
 
 
 
<
/form>
<
/body>
<
/html>
 
一些错误的使用:
之所以说第一种绑定方式要用于非服务器端控件的属性,是因为如果应用于这些服务器端属性时,这些代码实际上不被解析。 比如:
以下为引用的内容:
 
<
asp:Label ID="Label1" runat="server" Text="<
%= GetVariableStr %>
">
<
/asp:Label>
 
<
asp:TextBox ID="TextBox1" runat="server" Text="<
%= GetVariableStr %>
">
<
/asp:TextBox>
 
则显示出来的Label1的文本是空,而TextBox中文本是"<
%= GetVariableStr %>
”,所以记住,对服务器端控件的属性加这样的代码块,将不被解析,而是将这一字符串直接作为属性值了,所以不是想要的结果。如果引号也不加上,将会编译错误,提示“服务器标记不能包含 <
% ... %>
构造。”。
这里结合开篇提到的关于将绑定代码快置于“Html显示内容的位置”时,如果在服务器端控件内,那四类控件如何显示的问题。如下:
以下为引用的内容:
 
<
asp:Label ID="Label1" runat="server" >
"<
%= GetVariableStr %>
"<
/asp:Label>
 
<
asp:TextBox ID="TextBox1" runat="server" >
"<
%= GetVariableStr %>
"<
/asp:TextBox>
 
其中,Label1属于嵌套类控件,Lab
DotNet前台代码绑定后台变量各种方法