Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以使用<;%=…%&燃气轮机;要在ASP.NET中设置控件属性?_Asp.net - Fatal编程技术网

我可以使用<;%=…%&燃气轮机;要在ASP.NET中设置控件属性?

我可以使用<;%=…%&燃气轮机;要在ASP.NET中设置控件属性?,asp.net,Asp.net,上面的代码不起作用。我可以在代码隐藏中设置文本框的MaxLength属性,但我不这么做。我是否可以像上面那样在前端代码中设置MaxLength属性?为什么不在后面代码中的Page_Init回调函数中设置它?语法转换为Response.Write(expression),将表达式的值注入到页面的呈现输出中。因为被转换为(本质上)响应。写入这些语句不能用于设置Web控件属性的值换句话说,您不能有如下标记: <asp:TextBox ID="tbName" CssClass="formField

上面的代码不起作用。我可以在代码隐藏中设置文本框的MaxLength属性,但我不这么做。我是否可以像上面那样在前端代码中设置MaxLength属性?

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

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

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

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


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

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


正如罗普斯塔所说,它不适用于语法

但您可能会使用数据绑定,这只需要使用语法,然后在CodeBehind中调用MyTextBox.Databind

当然,在这一点上,在CodeBehind中完成整个操作可能更为清晰


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

您可以使用数据绑定:

<asp:Label runat="server" id="CurrentTime" Text="<%= DateTime.Now.ToString() %>" />
或直接对页面进行数据绑定:

tbName.DataBind(); 

你可以通过数据绑定来实现

this.DataBind();
如果需要,可以在.aspx文件中嵌入“普通”代码,如:

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


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

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

<%
tbName.MaxLength = Constants.MaxCharacterLengthOfGameName
%>
<asp:TextBox ID="tbName" CssClass="formField" runat="server"></asp:TextBox>
然后像这样使用它

// 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);
    }
}


为什么要避免代码隐藏?+1。请注意,ExpressionBuilder的值只计算一次,因此它对常量是好的,对许多其他东西是坏的。+1这实际上是一个很好的解决方案,您不会因为它而膨胀viewstate。我完全忘记了这个功能。
<%
tbName.MaxLength = Constants.MaxCharacterLengthOfGameName
%>
<asp:TextBox ID="tbName" CssClass="formField" runat="server"></asp:TextBox>
// 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>