2011-12-06 166 views
0

MVC 3中的「遠程」註釋允許您調用「動作」爲您執行屬性數據驗證。這很漂亮!或者...是真的嗎?MVC 3 - 帶註釋的表單驗證

問題:下面的「遠程」註釋(見註釋)在客戶端調用代碼!我的角色類在模型中。我喜歡「遠程」,因爲我不需要編寫自定義驗證器。

我應該使用對象視圖模型模式並將屬性「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); 
    } 

回答