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

44

这个可以正常工作:

<span value="<%= this.Text %>" />

这个不起作用:

<asp:Label Text="<%= this.Text %>" runat="server" />

为什么会这样呢?

我该怎么样才能让第二种情况正常工作,即将标签的文本设置为“Text”变量的值?


可能是重复的问题:为什么在服务器控件上将 <%= %> 表达式用作属性值会导致编译错误?(https://dev59.com/Y3RC5IYBdhLWcg3wOeWB) - zzzzBov
7个回答

57

使用数据绑定表达式

<asp:Label ID="Label1" runat="server" Text="<%# DateTime.Now %>" ></asp:Label>

后端代码

protected void Page_Load(object sender, EventArgs e){
  DataBind();
}

10

你可以做到这一点

 <asp:Label ID="Label1" runat="server" ><%= variable%></asp:Label>

2
这应该是被接受的答案。不需要数据绑定。 - JohnOpincar
11
这个回答并没有回答这个问题,这个问题明确地询问了属性方面的内容。 - Fuser

9
在我的代码中,我很容易使用类似于这样的方式,但在像ListView Item模板这样的数据绑定控件中使用会有问题。
 <asp:HyperLink ID="EditAction" class="actionLinks" Visible='<%#Eval("IsTrue").ToString() != "True"%>' runat="server" NavigateUrl='<%# Eval("ContentId","/articles/edit.aspx?articleid={0}")%>' />

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

您可以轻松地使用

<a href="<%=myHref%>">My href</a> 

但是对于服务器控件和数据绑定控件之外的情况,我们需要在PageLoad事件中显式调用DataBind()方法。

<asp:Hyperlink ID="aa" NavigateUrl='<%#myHref%>' >

我同意。我尝试使用超链接,但内联表达式 <%=> 从未起作用。保持简单(KISS),我使用了<a href>并且它有效! - Aamir

8

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

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

<asp:Label ID="myLabel" runat="server" />

然后,在你的Page_Load函数中,设置标签'Text'字段的值。
protected void Page_Load(object sender, EventArgs e)
{
    myLabel.Text = 'Whatever you want the label to display';
}

这个函数将会在你的代码后台文件中,或者如果你没有使用代码后台模型,在你的aspx页面中需要

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

祝你好运。


6
<asp:Label> 是在运行时编译并转换为 HTML 标签。您可以使用 codebehind 设置文本,也可以像这样设置:
<asp:Label id="Text1" runat="server" />
<% Text1.Text = this.Text;%>

更新:看起来我的版本不起作用,这个更好:

protected void Page_Load(object sender,EventArgs e) 
{
    Text1.Text = this.Text;
}

6

不确定如何标记此类内容,但这是一个重复的问题。请参阅此线程

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


3
晚来的评论:我认为将按钮文本设置为简单的变量或函数在标记中比在代码后面更有意义,特别是当你有很多按钮设置为text="literal",但是有一两个需要一些代码时,大部分都在标记中设置,但异常情况要到代码后面去修改,这样不仅需要查看两个地方的文本值,而且还需要搜索在代码后面的位置。我肯定不会把十页代码放在标记中,但是一个简单的"text=<%=foo.bar%>"似乎非常有用。无论如何。 - Jay
1
在现实世界中,通常让某些东西正常工作比使其更清晰或更优雅更重要。 - Matthew Lock

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接