2011-12-06 18 views
0

MVC 3の "リモート"アノテーションを使用すると、プロパティデータの検証を行うための "アクション"を呼び出すことができます。美しい!それとも...本当ですか?MVC 3 - アノテーション付きフォーム検証

問題:以下の「リモート」注釈(コメントを参照)は、クライアントのコードを呼び出します!私のRoleクラスはモデルに含まれています。私はカスタムのバリデータを書く必要がないので、 "リモート"が好きです。

オブジェクトビューモデルのパターンを使用し、そこに「Role.Name」というプロパティを重複させる必要がありますか?それはうまくいくだろう。次に、別の問題:どうやってDRYの原理(自分を繰り返さないでください)を避けるのですか?オブジェクトビューにアノテーションを付けたプロパティを持つことは効率的ですか?モデルのプロパティは同じですか?私は心配の分離のためにこれはあまりにも多くの仕事ですか?

私はちょうどこの権利を設計し、正しいデザイン原則を適用しようとしているので、このウェブサイトがコードワイズに成長すると私は燃えません。

これを行うにはどうすればよいですか?

namespace StartWeb.Model.ObjectModel 
{ 
public class Role //this class is in the Model (see namespace) and it needs to be "client agnostic” 
    { 

     //Then, this annotation is NOT client agnostic, it calls a controller: 
     [Remote("ValidateRoleName", "Role", AdditionalFields="InitialRoleName", ErrorMessage = "Role Name already exists")] 
     public string Name { get; set; } 

これが(「クライアント」で)RoleControllerアクションで検証コードです:

[HttpGet] 
    [OutputCache(Location = OutputCacheLocation.None, NoStore = true)] 
    public JsonResult ValidateRoleName(string name, string initialRoleName) 
    { 
     bool isValid = true; 
     if (name != initialRoleName) isValid = !(new SecurityFacade().IsRoleNameExist(name));   
     return Json(isValid, JsonRequestBehavior.AllowGet); 
    } 

答えて

関連する問題