<
%
Function DisplayStr()
'....'
Response.Write " 字符串 "
End Function
% >
< div >< % = DisplayStr()% ></ div >
这样的代码在ASP中应该很常见,但把上面的代码改成ASP.NET的代码,用同样的方式调用的时候就会报错.
Function DisplayStr()
'....'
Response.Write " 字符串 "
End Function
% >
< div >< % = DisplayStr()% ></ div >
<
script runat
=
"
server
"
>
void DisplayStr()
{
Response.Write("字符串");
}
< script >
< div ><%= DisplayStr() %>< div >
原因是因为在ASP.NET中使用<%=%>就等于使用
HtmlTextWriter.Write方法,此方法的参数不允许以方法(函数)作为参数.这可能就是强类型语言和弱类型语言的差别吧.8-),这里要想让程序运行真确可以让Display()返回一个字符串.我不知道在ASP中"<%=%>"被编译成了什么,有知道的朋友可以告诉我一下.
void DisplayStr()
{
Response.Write("字符串");
}
< script >
< div ><%= DisplayStr() %>< div >
看了大家的回复,觉得自己写的文章缺少可信度,所以决定把如何证明<%= %>就等于HtmlTextWrite.Write的过程写出来
<%
@ Page Language
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
Default.aspx.cs
"
Inherits
=
"
_Default
"
%>
<! DOCTYPE html PUBLIC " -//W3C//DTD XHTML 1.0 Transitional//EN " " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
< script language = " c# " type = " text/C# " runat = " server " >
public string DisplayStr()
{
return "显示字符串!";
}
</ script >
< html xmlns = " http://www.w3.org/1999/xhtml " >
< head runat = " server " >
< title > 无标题页 </ title >
</ head >
< body >
< form id = " form1 " runat = " server " >
< div ><%= " 显示字符串! " %> </ div >
< div ><%= DisplayStr() %> </ div >
</ form >
</ body >
</ html >
上面是一个完整的页面,我们可以用
Reflector反编译一下他生产的代码得到下面的结果
<! DOCTYPE html PUBLIC " -//W3C//DTD XHTML 1.0 Transitional//EN " " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
< script language = " c# " type = " text/C# " runat = " server " >
public string DisplayStr()
{
return "显示字符串!";
}
</ script >
< html xmlns = " http://www.w3.org/1999/xhtml " >
< head runat = " server " >
< title > 无标题页 </ title >
</ head >
< body >
< form id = " form1 " runat = " server " >
< div ><%= " 显示字符串! " %> </ div >
< div ><%= DisplayStr() %> </ div >
</ form >
</ body >
</ html >
大家把红线圈起来的部分和源代码对比一下就能知道<%= %>表示什么了.
补充:<%= %>不能用在服务器控件的属性里面
1.
<
asp:Label ID
=
"
Label3
"
runat
=
"
server
"
Text
=
"
<%=DisplayStr()
%>
"
></
asp:Label
>
2.<asp:Label ID="Label3" runat="server" Text="<%="文本框"%>"></asp:Label>
3. <asp:Label ID="Label3" runat="server" Text="田田田"><%=DisplayStr()%></asp:Label>
上面的第一种用法不会报错但,但得不到期望的值,会返回如下的结果.
2.<asp:Label ID="Label3" runat="server" Text="<%="文本框"%>"></asp:Label>
3. <asp:Label ID="Label3" runat="server" Text="田田田"><%=DisplayStr()%></asp:Label>
<
span
id
="Label3"
>
<%
=
DisplayStr()
%>
</
span
>
第二种用法会报错.
第三种用法是没有问题的,不过<%=DisplayStr()%>的值会覆盖Text="田田田",原因是因为编译的顺序不同,但Label3的Text的值任然是"田田田"
题外话:在ASP.NET中已经很少看到<%= %>了,因为有了新的替代产品<%# %>,看上去有几分相似,但在使用上比<%=%>方便,而且也更强大.具体的可以参考数据绑定相关的内容.