2

我正在使用 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*
 />

是否可以?如果是,该怎么做?

4

3 回答 3

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;
于 2012-07-05T02:03:05.100 回答
1

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

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

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

有关更详细的说明和示例,请参阅 msdn 的链接。

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

于 2012-07-05T02:10:34.240 回答
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_GlobalResourcesASP.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

于 2012-07-05T02:51:09.613 回答