2012-04-14 81 views
1

我想在我的解決方案中添加或編輯用戶時驗證用戶名尚未使用。唯一驗證屬性不適用於編輯現有元素

這是我做的遠程驗證:

視圖模型:

[Required, Remote("UserNameAlreadyExists", "User", Error="Already exists!")] 
    public string UserName { get; set; } 

控制器:

public ActionResult UserNameAlreadyExists(string userName) 
    { 
     var user = _requestServiceClient.GetUserFromUserName(userName); 
     return Json(user == null, JsonRequestBehavior.AllowGet); 
    } 

它工作得很好的創作。但它不適用於版本,因爲編輯的用戶本身已經存在用戶名。你懂我的意思嗎?

解決方案是根據用戶名和用戶名簽入數據庫。因此,在編輯用戶的情況下,我們可以檢查用戶名是否存在(除了作爲參數傳遞的用戶標識符)。這是一個好的選擇嗎?如何在遠程驗證屬性中傳遞此用戶ID?

謝謝。

回答

5

如果您的用戶在創建後無法更改其用戶名,請使用不同的視圖模型進行編輯,您只需顯示UserName而不進行任何驗證。

否則,您可以使用AdditinalFields屬性額外的數據傳遞到您的驗證:

public class UserModel 
{ 
    public int Id{ get; set; } 

    [Required, Remote("UserNameAlreadyExists", "User", AdditionalFields = "Id")] 
    public string UserName { get; set; } 
} 

public ActionResult UserNameAlreadyExists(string userName, int id) 
{ 
    var user = _requestServiceClient.GetUserFromUserNameAndId(userName, id); 
    return Json(user == null, JsonRequestBehavior.AllowGet); 
} 

您還需要包括在Id財產您form如:

@using (Html.BeginForm()) 
{ 
    @Html.HiddenFor(m => m.Id) 
    @Html.TextBoxFor(m => m.UserName) 
    @Html.ValidationMessageFor(x => x.UserName) 
    <input type="submit" value="Save" /> 
} 
+0

非常感謝你。這很清楚。 – Bronzato 2012-04-14 14:58:29

相關問題