关于%=%
终极管理员 知识笔记 42阅读
ASP和ASP.NET都有“%=%”,用法是一样的。但是在ASP.NET,它就是出错了。首先,看一个ASP代码% functiondisplaystr()' '回应。write ' string ' end function % div %=displaystr()%/div。这段代码在ASP中应该是很常见的,但是如果你把上面的代码改成ASP.NET代码,用同样的方法调用时会得到一个错误。ScriptRunat=' server' Voiddispl。
_Closed_Text" style="border: 1px solid rgba(128, 128, 128, 1); display: none; background-color: rgba(255, 255, 255, 1)">{Response.Write("字符串");
}
<script>
<div><%= DisplayStr()%><div> 原因是因为在ASP.NET中使用<%=%>就等于使用HtmlTextWriter.Write方法,此方法的参数不允许以方法(函数)作为参数.这可能就是强类型语言和弱类型语言的差别吧.8-),这里要想让程序运行真确可以让Display()返回一个字符串.我不知道在ASP中"<%=%>"被编译成了什么,有知道的朋友可以告诉我一下.
看了大家的回复,觉得自己写的文章缺少可信度,所以决定把如何证明<%= %>就等于HtmlTextWrite.Write的过程写出来
<%@ Page Language="C#" AutoEventWireup="true" Code>="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
<script language="c#" type="text/C#" runat ="server" >
public string DisplayStr()
{
return "显示字符串!";
}
</script>
<html xmlns="" >
<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" "">
<script language="c#" type="text/C#" runat ="server" >
public string DisplayStr()
{
return "显示字符串!";
}
</script>
<html xmlns="" >
<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中已经很少看到<%= %>了,因为有了新的替代产品<%# %>,看上去有几分相似,但在使用上比<%=%>方便,而且也更强大.具体的可以参考数据绑定相关的内容.

标签: