代码之家  ›  专栏  ›  技术社区  ›  burnt1ce

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

  •  6
  • burnt1ce  · 技术社区  · 16 年前
    <asp:TextBox ID="tbName" CssClass="formField" MaxLength="<%=Constants.MaxCharacterLengthOfGameName %>" runat="server"></asp:TextBox>
    

    上面的代码不起作用。我可以在后面的代码中设置文本框的maxlength属性,但我不这么做。是否可以在前端代码中设置maxlength属性,如上所述?

    9 回复  |  直到 16 年前
        1
  •  14
  •   Darin Dimitrov    16 年前

    您可以使用数据绑定:

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

    在您的代码隐藏页中,加载调用:

    tbName.DataBind(); 
    

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

    this.DataBind();
    
        2
  •  6
  •   Ropstah    16 年前

    <%=expression%>语法转换为response.write(expression),将表达式的值注入到页的呈现输出中。因为<%=expression%>被转换为(本质上)响应。写入这些语句不能用于设置Web控件属性的值。 换句话说,您不能使用如下标记:

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

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

        3
  •  6
  •   gius    16 年前

    尝试使用自定义表达式生成器:

    // 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>
    
        4
  •  4
  •   Brian MacKay    16 年前

    正如Ropstah所说,它不适用于<%=expression%>语法。

    但您可能会使用数据绑定,这只要求您使用<%expression%>语法,然后在codebehind中调用mytextbox.databind。

    当然,在这一点上,只使用codebehind执行整个操作可能会更清楚。

    另一种选择是:如果您真的希望这是声明性的,您可以摆脱标签,将表达式嵌入到一个span标记中。这样,您仍然可以应用css等,我认为<%=expression%>语法会起作用。

        5
  •  3
  •   jkelley    16 年前

    为什么不在代码隐藏的page_in it回调函数中设置它呢?

        6
  •  1
  •   wefwfwefwe    16 年前

    此示例旨在从Linq中的底层SQL类型获取最大长度。但是你应该能够根据你的需要定制它

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

        7
  •  1
  •   TGnat    16 年前

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

    您可以通过使用外观文件来完成此操作。您在皮肤文件中按正常方式设置最大长度,然后使用该最大长度的任何文本框都将使用皮肤。如果长度更改,则只需更改外观文件。

        8
  •  1
  •   Bob    16 年前

    您可以使用数据绑定

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

    然后在代码后面

    protected void Page_Load(object sender, EventArgs e) {
        Page.DataBind();
    }
    
        9
  •  1
  •   Svend    16 年前

    如果需要,可以在.aspx文件中嵌入“normal”代码,例如:

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

    这又回到了老式的“经典”ASP方式。

    推荐文章