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);
}