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

时间:2009-09-01 14:21:10

标签: asp.net

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

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

9 个答案:

答案 0 :(得分:14)

您可以使用DataBinding:

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

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

tbName.DataBind(); 

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

this.DataBind();

答案 1 :(得分:6)

&lt;%=表达式%&gt;语法被转换为Response.Write(表达式),将表达式的值注入页面的渲染输出中。因为&lt;%=表达式%&gt;被翻译成(本质上)一个Response.Write这些语句不能用于设置Web控件属性的值。 换句话说,您不能拥有如下标记:

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

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

答案 2 :(得分: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>

答案 3 :(得分:4)

正如罗普斯塔所说,它不适用于&lt;%=表达式%&gt;句法。

但你可以使用数据绑定,这只需要你使用&lt;%#expression%&gt;语法,然后在CodeBehind中调用MyTextBox.Databind。

当然,在那时,在CodeBehind中执行整个操作可能会更清楚。

另一种选择:如果你真的希望这是声明性的,你可以远离Label并将你的表达式嵌入到span标签中。这样你仍然可以应用CSS等,我认为&lt;%=表达式%GT;语法可行。

答案 4 :(得分:3)

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

答案 5 :(得分:1)

看起来您希望能够从一个位置控制特定类型文本框的最大长度,这样如果需要更改最大长度,您只需要在一个位置更改它。

您可以使用皮肤文件来完成此操作。您可以像平常一样在皮肤文件中设置最大长度,然后使用该最大长度的任何文本框都将使用皮肤。如果长度发生变化,那么您只需要更改皮肤文件。

答案 6 :(得分:1)

此示例旨在从linq中获取底层sql类型的最大长度。但您应该能够根据需要进行自定义

http://blog.binaryocean.com/2008/02/24/TextBoxMaxLengthFromLINQMetaData.aspx

答案 7 :(得分:1)

您可以使用数据绑定

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

然后在

背后的代码中
protected void Page_Load(object sender, EventArgs e) {
    Page.DataBind();
}

答案 8 :(得分:1)

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

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

这让人回想起一种老式的“经典”ASP方式。