如何将变量连接到一些<asp:.. =“”>属性?</asp:>

时间:2012-07-05 02:00:28

标签: c# asp.net webforms

我正在使用C#/ ASP.NET中的小型Web表单。我想将错误消息存储到C#类的变量中;像这样的东西:

public static class ErrorMessages { 
 public static string fooX = "baa"; 
 // etc..
}

然后在ASP标记的某些属性中将其连接起来:

<asp:RegularExpressionValidator runat="server"
     ControlToValidate="baain"
     ErrorMessage= *ErrorMessages.fooX*
 />

有可能吗?如果是的话,怎么做?

3 个答案:

答案 0 :(得分:1)

在aspx页面中,您可以尝试:

ErrorMessage='<%# ErrorMessages.fooX %>'

在页面加载调用后面的代码DataBind();

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

我不确定是否要连接页面的aspx部分,您可以在后面的代码中设置RegularExpressionValidator的ErrorMessage属性。类似的东西:

RegularExpressionValidator1.ErrorMessage = "Your message";

RegularExpressionValidator1.ErrorMessage = ErrorMessages.fooX;

答案 1 :(得分:1)

一种方法是创建自己的自定义表达式构建器。

ExpressionBuilder类是表达式构建器的基类,例如AppSettingsExpressionBuilder类,它在页面解析期间创建代码表达式。

表达式构建器解析声明性表达式并创建代码以检索绑定到控件属性的值。在非编译方案中,支持无编译功能的表达式构建器在运行时评估表达式。

请参阅msdn的链接以获取更详细的说明和示例。

http://msdn.microsoft.com/en-us/library/system.web.compilation.expressionbuilder.aspx

答案 2 :(得分:1)

这很简单,你试过这个:

<%= YourNamespace.YourConstant %>

或(.Net 4,此选项将自动对文本进行编码)

<%: YourNamespace.YourConstant %>

有几个运营商:

  • <%#用于数据绑定

  • <%$用于表达式,而不是代码;常见于DataSources:

  • <%=返回字符串

  • <%:<%=相同,但它会对代码中的值进行自动html编码

编辑1

我刚刚测试过,看来您无法在服务器控件中使用内联代码......

所以替代方法:

  • 只需使用

    后面的代码分配值即可
     this.myRegularExpressionValidator.ErrorMessage = ErrorMessages.Foo;
    
  • 请改用资源。使用资源,您将获得许多好处,例如您的站点本地化,并且由于资源只是xml文件,您可以将它们放在站点中而无需重新编译(假设您没有使用附属程序集来存储资源)

    <asp:RegularExpressionValidator runat="server" ErrorMessage="<%$ Resources:Resource, MyResource %>" />
    

    哪里

    • Resource指的是全局资源文件
    • MyResource是指包含文本
    • 的资源文件中的密钥

    全局资源必须放在App_GlobalResources ASP.Net特殊文件夹中,例如资源文件名:Resource.resx

    资源文件的示例

    <?xml version="1.0" encoding="utf-8"?>
    <root>
      <data name="MyResource" xml:space="preserve">
        <value>My error message</value>
      </data>
    </root>
    

    可以使用Visual Studio添加和管理资源文件,因此您无需手动处理XML