3

这段代码:

<asp:TextBox runat="server" MaxLength="<%=Settings.UsernameMaxLength %>" ID="Username"/>

引发解析器错误。

是否可以在不使用后面的代码的情况下以任何类似的方式设置属性?

4

3 回答 3

2

不,这是不可能的。语法<%= some code here %>不能与服务器端控件一起使用。您可以使用<%# some code here %>,但仅在数据绑定的情况下,或者只是在代码中设置此属性,例如 on Page_Load

protected void Page_Load(object source, EventArgs e)
{
    Username.MaxLength = Settings.UsernameMaxLength;
}
于 2013-08-08T12:50:12.107 回答
1

你可以试试这个,它应该在渲染时设置MaxLength值:

<%
  Username.MaxLength = Settings.UsernameMaxLength;
%>
<asp:TextBox runat="server" ID="Username"/>

我认为(未尝试)你也可以写:

<asp:TextBox runat="server" MaxLength="<%#Settings.UsernameMaxLength %>" ID="Username"/>

但是你需要call Username.DataBind()在代码隐藏的某个地方。

于 2013-08-08T13:35:13.260 回答
0

我在这里的聚会迟到了,但不管怎样……

你可以建立自己的Expression Builder来处理这种情况。这将允许您使用如下语法:

<asp:TextBox 
    runat="server" 
    MaxLength="<%$ MySettings: UsernameMaxLength %>"
    ID="Username"/>

注意$标志。

要了解如何让自己拥有Expression Builder,请阅读这个古老但仍然相关的教程。不要让文字墙吓跑你,因为最后,制作表达式构建器很容易。它基本上包括从方法派生一个类System.Web.Compilation.ExpressionBuilder并覆盖该GetCodeExpression方法。这是一个非常简单的示例(此代码的某些部分是从链接的教程中借用的):

public class SettingsExpressionBuilder : System.Web.Compilation.ExpressionBuilder
{
    public override System.CodeDom.CodeExpression GetCodeExpression(System.Web.UI.BoundPropertyEntry entry, object parsedData, System.Web.Compilation.ExpressionBuilderContext context)
    {
        // here is where the magic happens that tells the compiler
        // what to do with the expression it found.
        // in this case we return a CodeMethodInvokeExpression that
        // makes the compiler insert a call to our custom method
        // 'GetValueFromKey'
        CodeExpression[] inputParams = new CodeExpression[] {
            new CodePrimitiveExpression(entry.Expression.Trim()), 
            new CodeTypeOfExpression(entry.DeclaringType), 
            new CodePrimitiveExpression(entry.PropertyInfo.Name)
        };

        return new CodeMethodInvokeExpression(
            new CodeTypeReferenceExpression(
                this.GetType()
            ),
            "GetValueFromKey",
            inputParams
        );
    }
    public static object GetValueFromKey(string key, Type targetType, string propertyName)
    {
        // here is where you take the provided key and find the corresponding value to return.
        // in this trivial sample, the key itself is returned.
        return key;
    }
}

为了在您的 aspx 页面中使用它,您还必须在以下位置注册它web.config

<configuration>
    <system.web>
        <compilation ...>
            <expressionBuilders>
                <add expressionPrefix="MySettings" type="SettingsExpressionBuilder"/>
            </expressionBuilders>
         </compilation>
     </system.web>
</configuration>

这只是为了告诉你这并不难。但是请查看我链接到的教程,以查看如何根据分配的属性等处理方法的预期返回类型的示例。

于 2013-10-30T13:48:59.270 回答