Вы можете использовать выражение привязки данных:
<asp:TextBox MaxLength="<%# Constant.Value %>" />
но , что требует, чтобы он находился в элементе управления с привязкой к данным. Если это не повторитель или что-то подобное, вам нужно вызвать Container.DataBind () в какой-то момент жизненного цикла страницы.
В качестве альтернативы, вы можете создать ExpressionBuilder , который бы разрешал синтаксис, такой как:
<asp:TextBox MaxLength="<%$ Constants:Value %>" />
Вот пример, который будет извлечен из одного статического словаря:
using System;
using System.Web.UI;
using System.Web.Compilation;
using System.CodeDom;
using System.Collections.Generic;
class ConstantsExpressionBuilder : ExpressionBuilder {
private static readonly Dictionary<string, object> Values =
new Dictionary<string, object>() {
{ "Value1", 12 },
{ "Value2", false },
{ "Value3", "this is a test" }
};
public override bool SupportsEvaluate { get { return true; } }
public override object EvaluateExpression(object target, BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) {
string key = entry.Expression.Trim();
return GetValue(key);
}
public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) {
CodePrimitiveExpression keyExpression = new CodePrimitiveExpression(entry.Expression.Trim());
return new CodeMethodInvokeExpression(this.GetType(), "GetValue", new CodeExpression[] { keyExpression });
}
public static object GetValue(string key) {
return Values[key];
}
}
Вы бы зарегистрировали это в web.config:
<system.web>
<compilation>
<expressionBuilders>
<add expressionPrefix="Constants" type="ConstantsExpressionBuilder" />
</expressionBuilders>
</compilation>
</system.web>
И позвоните на странице ASPX:
<asp:Textbox runat="server" MaxLength="<%$ Constants:Value1 %>" ReadOnly="<%$ Constants:Value2 %>" Text="<%$ Constants:Value3 %>" />
Который должен производить:
<input type="text" maxlength="12" readonly="false" value="this is a test" />
в выводе HTML.