欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

关于%=%

终极管理员 知识笔记 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反编译一下他生产的代码得到下面的结果

大家把红线圈起来的部分和源代码对比一下就能知道<%= %>表示什么了.

补充:<%= %>不能用在服务器控件的属性里面
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>
上面的第一种用法不会报错但,但得不到期望的值,会返回如下的结果.
<span id="Label3"><%=DisplayStr()%></span>
第二种用法会报错.
第三种用法是没有问题的,不过<%=DisplayStr()%>的值会覆盖Text="田田田",原因是因为编译的顺序不同,但Label3的Text的值任然是"田田田"

题外话:在ASP.NET中已经很少看到<%= %>了,因为有了新的替代产品<%# %>,看上去有几分相似,但在使用上比<%=%>方便,而且也更强大.具体的可以参考数据绑定相关的内容.

标签:
声明:无特别说明,转载请标明本文来源!