2

我正在使用 MVC3 和 C# 开发多租户应用程序。我正在使用带有验证属性装饰的属性的模型类。我想要做的是在客户端和服务器端返回租户特定的错误消息。

有没有办法挂钩 mvc 验证并在运行时为每个请求呈现/返回特定于租户的消息?

我的代码片段非常简单:

模型:

public class TestModel
{
  [Required(ErrorMessageResourceName="errormessage",        ErrorMessageResourceType=typeof(Global)]
  [RegularExpression(@"\d+", ErrorMessageResourceName="errormessagedigit",   ErrorMessageResourceType=typeof(Global)]  
  public string TestProperty {get; set;}
}

看法:

@using(Html.BeginFrom())
{
  @Html.ValidationSummary(false, "")<br/> 
  @Html.TextBoxFor(x => x.TextProperty)<br />
  <input type="submit" value="submit" />
}
4

2 回答 2

0

一种方法是创建一组自定义验证属性,每个验证属性都继承自一个现有验证属性(例如MyRequired),但包含用于注入租户特定错误消息的代码。

于 2012-06-11T03:13:47.687 回答
0

我想我知道我的问题的答案。

您需要从每个现有属性继承并覆盖 FormatErrorMessage 方法。在此方法中,您可以访问包含原始验证属性错误消息的 ErrorMessageString 属性。您可以创建请求/租户特定逻辑来格式化/覆盖错误消息。

看起来这种方法可以为每个请求错误消息返回 /render custom 。

代码片段:

public class RequiredAttributeTest:RequiredAttribute   
 {

public override string FormatErrorMessage(string name)        
   {
        // code to return request / tenant specific error message    
        return GetTenantError(ErrorMessageString, name); 
    }
}

public class RegularExpressionAtributeTest:RegularExpressionAttribute
  {
    public RegularExpressionAtributeTest(string pattern) : base(pattern) { }

public override string FormatErrorMessage(string name)
    {           
       // code to return request / tenant specific error message     
        return GetTenantError(ErrorMessageString, name);
    }
  }

全球.asax.cs

protected void Application_Start()
{
…
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(RequiredAttributeTest),  typeof(RequiredAttributeAdapter));
DataAnnotationsModelValidatorProvider.RegisterAdapter
(typeof(RegularExpressionAtributeTest), typeof(RegularExpressionAttributeAdapter));
…
}
于 2012-06-12T05:23:39.847 回答