关于<%= %>
2008-01-23 18:35
148 查看
ASP和ASP.NET中都有"<%=%>",用法也一样,但在ASP.NET中就是会出错.先看一段ASP的代码
<%
Function DisplayStr()
'....'
Response.Write "字符串"
End Function
%>
<div><%= DisplayStr()%></div>
这样的代码在ASP中应该很常见,但把上面的代码改成ASP.NET的代码,用同样的方式调用的时候就会报错.
<script runat="server">
void DisplayStr()
<script>
<div><%= DisplayStr()%><div>
原因是因为在ASP.NET中使用<%=%>就等于使用HtmlTextWriter.Write方法,此方法的参数不允许以方法(函数)作为参数.这可能就是强类型语言和弱类型语言的差别吧.8-),这里要想让程序运行真确可以让Display()返回一个字符串.我不知道在ASP中"<%=%>"被编译成了什么,有知道的朋友可以告诉我一下.
看了大家的回复,觉得自己写的文章缺少可信度,所以决定把如何证明<%= %>就等于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()
</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反编译一下他生产的代码得到下面的结果
<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中已经很少看到<%= %>了,因为有了新的替代产品<%# %>,看上去有几分相似,但在使用上比<%=%>方便,而且也更强大.具体的可以参考数据绑定相关的内容.
<%
Function DisplayStr()
'....'
Response.Write "字符串"
End Function
%>
<div><%= DisplayStr()%></div>
这样的代码在ASP中应该很常见,但把上面的代码改成ASP.NET的代码,用同样的方式调用的时候就会报错.
<script runat="server">
void DisplayStr()
<script>
<div><%= DisplayStr()%><div>
原因是因为在ASP.NET中使用<%=%>就等于使用HtmlTextWriter.Write方法,此方法的参数不允许以方法(函数)作为参数.这可能就是强类型语言和弱类型语言的差别吧.8-),这里要想让程序运行真确可以让Display()返回一个字符串.我不知道在ASP中"<%=%>"被编译成了什么,有知道的朋友可以告诉我一下.
看了大家的回复,觉得自己写的文章缺少可信度,所以决定把如何证明<%= %>就等于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()
</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反编译一下他生产的代码得到下面的结果
<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中已经很少看到<%= %>了,因为有了新的替代产品<%# %>,看上去有几分相似,但在使用上比<%=%>方便,而且也更强大.具体的可以参考数据绑定相关的内容.
相关文章推荐
- Struts2.5关于<s:action.../>标签找不到Action的问题
- 关于UITableView的Cell复用谈谈我的一些心得<滴水穿石>
- c++ 一个关于计时器的源代码 <转载>
- 日常错误1(关于<u></u>
- 【计算机视觉】<资料站点>关于计算机视觉的一些测试数据集和源码站点
- 关于<s:property>的用法
- HTML 关于<hr>标签,虚线
- <iOS>关于Xcode上的Other linker flags
- 关于jsp中使用 <jsp:userBean/> <jsp:setProperty/> <jsp:getProperty/>
- 关于c#中的Func<>和Action<>
- 关于<a>标签的 的target属性
- 关于Eigen::MatrixBase< Derived >
- 关于枚举器IEnumerator<T>接口实现foreach的迭代
- 关于<c:if>没有<c:else>解决方案
- C语言关于位<<和>>运算符
- 关于<logic:iterate>用法
- 关于eclipse Oxygen 版本的JSP页面中option里面写<c:if>嵌套时报错
- 关于<taglib>的uri的一点总结
- 关于maven依赖中的<scope>provided</scope>使用
- 关于<c:if>没有<c:else>解决方案