ASP和ASP.NET中都有"<%=%>",用法也一样,但在ASP.NET中就是会出错.先看一段ASP的代码
看了大家的回复,觉得自己写的文章缺少可信度,所以决定把如何证明<%= %>就等于HtmlTextWrite.Write的过程写出来
大家把红线圈起来的部分和源代码对比一下就能知道<%= %>表示什么了.
补充:<%= %>不能用在服务器控件的属性里面
第三种用法是没有问题的,不过<%=DisplayStr()%>的值会覆盖Text="田田田",原因是因为编译的顺序不同,但Label3的Text的值任然是"田田田"
题外话:在ASP.NET中已经很少看到<%= %>了,因为有了新的替代产品<%# %>,看上去有几分相似,但在使用上比<%=%>方便,而且也更强大.具体的可以参考数据绑定相关的内容.
<%
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中已经很少看到<%= %>了,因为有了新的替代产品<%# %>,看上去有几分相似,但在使用上比<%=%>方便,而且也更强大.具体的可以参考数据绑定相关的内容.