我想在我的解决方案中添加或编辑用户时验证用户名是否尚未使用.
以下是我对远程验证的处理方法:
视图模型:
[Required, Remote("UserNameAlreadyExists", "User", Error="Already exists!")]
public string UserName { get; set; }
Run Code Online (Sandbox Code Playgroud)
控制器:
public ActionResult UserNameAlreadyExists(string userName)
{
var user = _requestServiceClient.GetUserFromUserName(userName);
return Json(user == null, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)
它非常适合创作.但它不适用于版本,因为已编辑的用户本身已存在用户名.你懂我的意思吗?
解决方案是根据UserName和UserID检入DB.因此,在编辑用户的情况下,我们可以检查用户名是否还不存在(除了作为参数传递的用户标识).这是一个很好的选择吗?如何在远程验证属性中传递此userID?
谢谢.
如果您的用户在创建后无法更改其用户名,则使用不同的视图模型进行编辑,您只需显示该用户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);
}
Run Code Online (Sandbox Code Playgroud)
您还需要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" />
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2809 次 |
| 最近记录: |