2

在我的解决方案中添加或编辑用户时,我想验证用户名是否尚未使用。

这是我对远程验证所做的事情:

视图模型:

    [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 签入数据库。所以在编辑用户的情况下,我们可以检查用户名不存在(除了作为参数传递的用户ID)。这是一个很好的选择吗?如何在远程验证属性中传递此用户 ID?

谢谢。

4

1 回答 1

6

如果您的用户在创建后无法更改其用户名,则使用不同的视图模型进行编辑,您只需在其中显示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" />
}
于 2012-04-14T14:38:08.490 回答