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

bur*_*1ce 6 asp.net

<asp:TextBox ID="tbName" CssClass="formField" MaxLength="<%=Constants.MaxCharacterLengthOfGameName %>" runat="server"></asp:TextBox>
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用.我可以在后面的代码中设置文本框的MaxLength属性,但我宁愿不这样做.有没有我可以像前面那样在前端代码中设置MaxLength属性?

Dar*_*rov 14

您可以使用DataBinding:

<asp:TextBox 
    ID="tbName" 
    CssClass="formField" 
    MaxLength="<%# Constants.MaxCharacterLengthOfGameName %>" 
    runat="server">
</asp:TextBox>
Run Code Online (Sandbox Code Playgroud)

并在您的代码后面的Page_Load调用:

tbName.DataBind(); 
Run Code Online (Sandbox Code Playgroud)

或者直接对数据页进行数据绑定:

this.DataBind();
Run Code Online (Sandbox Code Playgroud)


Rop*_*tah 6

<%= expression%>语法被转换为Response.Write(expression),将expression的值注入页面的呈现输出.因为<%= expression%>被转换为(本质上)Response.Write,所以这些语句不能用于设置Web控件属性的值.换句话说,您不能拥有如下标记:

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

资料来源:http://aspnet.4guysfromrolla.com/articles/022509-1.aspx


giu*_*ius 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后像使用它一样

<asp:TextBox ID="tbName" CssClass="formField" MaxLength="<%$ Code: Constants.MaxCharacterLengthOfGameName %>" runat="server"></asp:TextBox>
Run Code Online (Sandbox Code Playgroud)