我有一个MVC 3应用程序,我正在尝试显示自定义验证错误。模型生成的正常验证错误(即必需)显示在页面上。现在我正在检查用户是否存在,如果存在,则添加错误消息:
if (userExists)
ModelState.AddModelError("UserName", UserManagementResources.UserAlreadyExistsText);
return View(model);
在视图中,我有一个验证摘要和一个Html.ValidationMessage(“UserName”),但是没有人显示错误。我在其他页面上成功使用过它。我可以看到与该页面的唯一区别是,它使用RequiredIf验证器脚本。 http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx
如何解决这个问题的任何想法都表示赞赏。感谢。
修改
我通过远程验证返回验证消息。如果我查看网络正在做什么,它将返回错误消息,但它仍未显示在视图上。
[Required]
[DataType(DataType.EmailAddress)]
[Remote("IsUserAvailable", "Validation", ErrorMessage = "Ein Benutzer mit dieser Email existiert bereits.")]
[Display(Name = Resources.EmailText, ResourceType = typeof(Resources))]
public string Email
{
get { return User.Email; }
set { User.Email = value; }
}
观点:
@Html.LabelFor(u => u.Email, Resources.Email + " (Login) *")
@Html.EditorFor(u => u.Email)
@Html.ValidationMessageFor(u => u.Email)
<br clear="all" />
远程验证控制器:
public class ValidationController : Controller
{
public JsonResult IsUserAvailable(string Email)
{
bool userExists;
using (var userModel = new UserManagementModel())
{
userExists = userModel.UserExists(Email);
}
if(userExists)
return Json(UserManagementResources.UserAlreadyExists, JsonRequestBehavior.AllowGet);
else
return Json(true, JsonRequestBehavior.AllowGet);
}
}
答案 0 :(得分:3)
为什么不为此使用Remote validation?
为什么回发只是为了检查用户是否存在?
示例:
public class RegisterModel
{
[Required]
[Remote("UserNameExists", "Validation", "", ErrorMessage = "Username is already taken.")]
[RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed.")]
[Display(Name = "Username")]
public string UserName { get; set; }
}
并创建一个具有UserNameExists
方法的验证控制器,如
public JsonResult UserNameExists(string UserName)
{
var user = _db.Users.Where(x => x.username.Equals(UserName));
return user == null ?
Json(true, JsonRequestBehavior.AllowGet) :
Json(string.Format("{0} is not available.", register.UserName), JsonRequestBehavior.AllowGet);
}
答案 1 :(得分:1)
当您更改jQuery.js的版本时,您还必须更改validation.js文件。不同的版本彼此不兼容,当您混淆文件时,您可能会在不同的浏览器中看到奇怪的行为。