2015-04-06 65 views
0

我對寄存器模式遠程驗證限制爲編輯控制器的方法

我的模型類

public class RegisterViewModel 
{ 


    [Required] 
    [StringLength(100, ErrorMessage = "Please enter a minimum of {2} characters", MinimumLength = 6)] 
    [DisplayName("University ID")] 
    [Remote("doesusernameExist", "HEC",null, ErrorMessage = "usr name is allready exist", HttpMethod = "POST")] 
    public string usrname { get; set; } } 

的json控制器類

[HttpPost] 
    public JsonResult doesusernameExist(string usrname) 
    { 

     var institute = db.Institutes.Find(HEI_ID); 
        return Json(institute == null); 


    } 

的創建我是新用戶和編輯用戶使用以上模型。所以沒有創造另一種模式,我想禁用的編輯方法doesusernameExist調用方法

+1

您也需要2個視圖模型(最佳的解決方案),或者需要一個額外的值傳遞給'doesusernameExist()'使用方法(表示ID屬性)的'AdditionalFields' p 「RemoteAttribute」屬性,以便您可以使用它來有條件地測試是否需要執行數據庫檢查(即,如果ID爲null或爲零,則爲新對象,所以'返回Json(true);'或任何您想要應用的邏輯) – 2015-04-06 12:23:39

回答

1

先在編輯視圖禁用客戶端驗證username:在編輯帖子行動

@Html.TextBoxFor(m => m.username, new { @data_val = "false" }) 

其次從ModelState刪除驗證結果爲username

public ActionResult EditUser([Bind(Exclude = "usrname")]RegisterViewModel model) 
{ 
    ModelState.Remove("username"); 
    if (ModelState.IsValid) 
    { 
    . 
    . 
    . 
+0

非常感謝您的答案,它確切的位置 – Chathz 2015-04-07 04:24:52

+0

這將刪除所有驗證,包括'[Required ]'和'[StringLength]'驗證! – 2015-04-07 23:27:02

+1

當然,它會刪除所有驗證,但在「編輯用戶操作」中,不需要檢查用戶名,因爲它已經存在,用戶不能更改他/她的用戶名。很明顯,不是嗎? – 2015-04-08 04:36:03