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

私は自分の質問に対する答えを理解していると思います。

既存の各属性から継承し、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);
    }
  }

Global.asax.cs

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

1 つのアプローチは、既存の検証属性 (例: ) の 1 つからそれぞれが継承する一連のカスタム検証属性MyRequiredを作成することですが、テナント固有のエラー メッセージを挿入するコードを含めます。

于 2012-06-11T03:13:47.687 に答える