如何在服务器控件属性中使用ASP.NET <%=标签?

Joa*_*lva 41 asp.net tags

这有效:

<span value="<%= this.Text %>" />
Run Code Online (Sandbox Code Playgroud)

这不起作用:

<asp:Label Text="<%= this.Text %>" runat="server" />
Run Code Online (Sandbox Code Playgroud)

这是为什么?

如何使第二种情况正常工作,即将标签的文本设置为"文本"变量的值?

ada*_*ost 54

使用数据绑定表达式

<asp:Label ID="Label1" runat="server" Text="<%# DateTime.Now %>" ></asp:Label>
Run Code Online (Sandbox Code Playgroud)

代码背后,

protected void Page_Load(object sender, EventArgs e){
  DataBind();
}
Run Code Online (Sandbox Code Playgroud)


小智 11

你可以这样做

 <asp:Label ID="Label1" runat="server" ><%= variable%></asp:Label>
Run Code Online (Sandbox Code Playgroud)

  • 该答案没有解决专门针对属性的问题。 (7认同)
  • 这应该是公认的答案。无需数据绑定。 (2认同)

小智 7

您需要在代码中设置服务器控件的值

首先,为标签控件分配一个ID,以便访问该控件

<asp:Label ID="myLabel" runat="server" />
Run Code Online (Sandbox Code Playgroud)

然后,在Page_Load函数中,设置标签"文本"字段的值

protected void Page_Load(object sender, EventArgs e)
{
    myLabel.Text = 'Whatever you want the label to display';
}
Run Code Online (Sandbox Code Playgroud)

此函数将在您的代码隐藏文件中,或者,如果您不使用模型背后的代码,则在您的aspx页面中,您将需要

<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        myLabel.Text = 'Whatever you want the label to display';
    }
</script>
Run Code Online (Sandbox Code Playgroud)

祝好运.


Sac*_*mar 7

在我的代码中,我很容易使用类似这样的东西,但在数据绑定控件中,如ListView Item模板

 <asp:HyperLink ID="EditAction" class="actionLinks" Visible='<%#Eval("IsTrue").ToString() != "True"%>' runat="server" NavigateUrl='<%# Eval("ContentId","/articles/edit.aspx?articleid={0}")%>' />
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用<%#..%>在数据绑定控件之外使用时,它根本不起作用.

你可以很容易地做到

<a href="<%=myHref%>">My href</a> 
Run Code Online (Sandbox Code Playgroud)

但是对于服务器控件,以及数据绑定控件之外.我们需要在pageload事件中显式调用DataBind()

<asp:Hyperlink ID="aa" NavigateUrl='<%#myHref%>' >
Run Code Online (Sandbox Code Playgroud)


x2.*_*x2. 6

<asp:Label>正在运行时编译并转换为html标记.您可以使用codebehind设置文本,或者像这样:

<asp:Label id="Text1" runat="server" />
<% Text1.Text = this.Text;%>
Run Code Online (Sandbox Code Playgroud)

UPD:好像我的变种不起作用,这更好:

protected void Page_Load(object sender,EventArgs e) 
{
    Text1.Text = this.Text;
}
Run Code Online (Sandbox Code Playgroud)


che*_*ett 6

不知道如何标记这一点,但这有点重复. 看到这个帖子.

我不认为将代码嵌入到您的标记中会使您的标记更清晰或更优雅.

  • 迟到的评论:我认为将标签设置为简单变量或函数的文本在标记中比在后面的代码中更有意义.特别是如果你有很多按钮设置text ="literal",但是一两个需要一些代码,那么大多数是在标记中设置但是异常在后面的代码中是令人讨厌的.现在我不仅要查看两个地方才能看到文本值,但我必须搜索后面的代码中查找位置.我当然不会在标记中放入十页代码,但简单的"text =&lt;%= foo.bar%&gt;似乎非常有用.无论如何. (2认同)