刚以前同事Q问我 <asp:Literal ID="lss" runat="server" Text="<%=d%>"></asp:Literal>这样写为什么不对怎么取不到值啊
后台 public string d = "s";
protected void Page_Load(object sender, EventArgs e)
{
d = "11dasssssss";
}
结果: 运行后Literal 的值为空
技术群有的说什么不能二次编译,
有的说Literal 本身就是读取
我认为都没说到本质上,
求大侠说说 在服务器控件中不能用<%=value%>绑定值得根本原因是什么
后台 public string d = "s";
protected void Page_Load(object sender, EventArgs e)
{
d = "11dasssssss";
}
结果: 运行后Literal 的值为空
技术群有的说什么不能二次编译,
有的说Literal 本身就是读取
我认为都没说到本质上,
求大侠说说 在服务器控件中不能用<%=value%>绑定值得根本原因是什么
<form id="form1" runat="server">
<%=d%>
<div>
<asp:literal runat="server" Text="<%=d%>"></asp:literal>
</div>
</form>
html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title></head>
<body>
<form method="post" action="Default.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJMTIwMzgwMDM0ZGS6CntZpDuNP9JNrPhvjMfSe05vURysX7oGDt/3qLfhGg==" />
</div> doad
<div>
<%=d%>
</div>
</form>
</body>
</html>
</body>
</html>
{
get { return d; }
set { d= value; }
}
protected void Page_Load(object sender, EventArgs e)
{
this.D = "11dasssssss";
} <asp:Literal ID="lss" runat="server" Text="<%=this.D%>"></asp:Literal>这样才能取到
protected void Page_Load(object sender, EventArgs e)
{
if(!ispostback)
{
d = "11dasssssss";
}
}
我感觉啊
因为后台cs代码先执行,所以先创建对象Literal ,再给Literal 的text属性赋值 “<%=d%>”(string);
然后aspx页面的Literal.text为string类型的,值为“<%=d%>”已经不是代码执行块了。锁一在实行完cs代码,执行aspx里页面的代码块时,不执行,没有可执行的代码区域。。
对于服务器空间中的<%=>,则为左处理,只是把它作为控件的值,不加处理
前台输出:<%= str.ToString() %>
这样也可以
type = Request.QueryString["type"];
<form id="uploadForm" action='File.ashx?type=<%=type %>'>
个人理解,不知道对不对!
而 <%= %>应该是属于呈现步骤。
而你现在就好像要从呈现到加载,这本身就是不合理的。