我能使用<%= ... %>在ASP.NET中设置控件属性吗?

6
<asp:TextBox ID="tbName" CssClass="formField" MaxLength="<%=Constants.MaxCharacterLengthOfGameName %>" runat="server"></asp:TextBox>

上述代码无法正常工作。我可以在后端代码中设置文本框的MaxLength属性,但我不想这样做。是否有办法在前端代码中像上面那样设置MaxLength属性?


3
为什么要避免使用代码后台? - AnthonyWJones
9个回答

14

你可以使用数据绑定(DataBinding):

<asp:TextBox 
    ID="tbName" 
    CssClass="formField" 
    MaxLength="<%# Constants.MaxCharacterLengthOfGameName %>" 
    runat="server">
</asp:TextBox>

并且在您的代码后台的Page_Load函数中调用:

tbName.DataBind(); 

或者直接使用数据绑定页面:

this.DataBind();

6

<%= TextBox1.Text %>

“<%= expression %>”语法被翻译成Response.Write(expression),将expression的值注入到页面的呈现输出中。因为“<%= expression %>”实际上被翻译成了一个Response.Write,所以这些语句不能用于设置Web控件属性的值。换句话说,您不能有以下类似的标记:

<%= TextBox1.Text %>

<asp:Label runat="server" id="CurrentTime" Text="<%= DateTime.Now.ToString() %>" />

来源: https://web.archive.org/web/20210513211719/http://aspnet.4guysfromrolla.com/articles/022509-1.aspx

本文将介绍如何使用ASP.NET MVC和jQuery创建可排序、可过滤和可分页的表格。我们将使用MVC的强大功能来构建一个基本的网站,然后添加一些jQuery插件来增强表格的交互性。最终,我们将得到一个漂亮、易于使用的表格,用户可以轻松地对其进行排序、过滤和分页。

6

尝试使用自定义表达式构建器:

// from http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx
[ExpressionPrefix("Code")]
public class CodeExpressionBuilder : System.Web.Compilation.ExpressionBuilder
{
    public override CodeExpression GetCodeExpression(BoundPropertyEntry entry,
       object parsedData, ExpressionBuilderContext context)
    {
        return new CodeSnippetExpression(entry.Expression);
    }
}

然后像这样使用它

<asp:TextBox ID="tbName" CssClass="formField" MaxLength="<%$ Code: Constants.MaxCharacterLengthOfGameName %>" runat="server"></asp:TextBox>

+1. 注意,ExpressionBuilder的值只被评估一次,因此适用于常量,但对于许多其他事情来说并不好。 - devstuff
+1 这实际上是一个很棒的解决方案,使用它不会使视图状态变得臃肿。我完全忘记了这个功能。 - Bob

4
正如Ropstah所说,<%= expression %>语法无法使用。
但是你可以使用数据绑定,只需要使用<%# expression %>语法,然后在CodeBehind中调用MyTextBox.Databind。
当然,在这一点上,直接在CodeBehind中完成整个操作可能更清晰明了。
另一个选择:如果你真的想让这个声明性,你可以摆脱Label,并将表达式嵌入span标记中。这样你仍然可以应用CSS等,我认为<%= expression %>语法会奏效。

3
为什么不在代码后台的Page_Init回调函数中设置它呢?

1

看起来你想要从单一位置控制特定类型的文本框的最大长度,以便如果需要更改该最大长度,只需在一个地方进行更改。

您可以通过使用皮肤文件来实现此目的。您可以像通常设置最大长度一样在皮肤文件中设置它,然后使用该最大长度的任何文本框都将使用该皮肤。如果长度发生变化,则只需更改皮肤文件即可。


1

1

你可以使用数据绑定来实现

<asp:TextBox 
    ID="tbName" 
    CssClass="formField" 
    MaxLength='<%# Constants.MaxCharacterLengthOfGameName %>' 
    runat="server" />

然后在代码后台

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

1

如果您愿意,可以在 .aspx 文件中嵌入“普通”的代码,例如:

<%
tbName.MaxLength = Constants.MaxCharacterLengthOfGameName
%>
<asp:TextBox ID="tbName" CssClass="formField" runat="server"></asp:TextBox>

这让人想起了旧式的“经典”ASP做法。


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