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