Asp.net mvc ASP.NET MVC3远程验证未输出错误消息
我有一个简单的模型,它是默认的Asp.net mvc ASP.NET MVC3远程验证未输出错误消息,asp.net-mvc,validation,asp.net-mvc-3,jquery-validate,Asp.net Mvc,Validation,Asp.net Mvc 3,Jquery Validate,我有一个简单的模型,它是默认的RegisterModel,在为Create创建基于该模型的视图时,我最终得到了 public class RegisterModel { [Required] [Remote("UserNameExists", "Account", "", ErrorMessage = "Username is already taken.")] [Display(Name = "Username (spaces will be stripped, mus
RegisterModel
,在为Create
创建基于该模型的视图时,我最终得到了
public class RegisterModel
{
[Required]
[Remote("UserNameExists", "Account", "", ErrorMessage = "Username is already taken.")]
[Display(Name = "Username (spaces will be stripped, must be at least 6 characters long)")]
public string UserName { get; set; }
[Required]
[Editable(true)]
[Display(Name = "First and Last name")]
public string Name { get; set; }
[Required]
[DataType(DataType.EmailAddress, ErrorMessage = "You need to enter a valid email")]
[Remote("EmailExists", "Account", "", ErrorMessage = "Email is already taken.")]
[Display(Name = "Email address")]
public string Email { get; set; }
//[Required]
//[ValidatePasswordLength]
[DataType(DataType.Password)]
[Display(Name = "Create a password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Verify password")]
//[Compare("Password", ErrorMessage = "Password's do not match.")]
public string ConfirmPassword { get; set; }
}
并且认为:
<h3>
Details</h3>
@using (Html.BeginForm("GenerateBetaLink", "Account", FormMethod.Post, new { @id = "beta-user" }))
{
@Html.ValidationSummary(true)
<div>
<div class="editor-label">
@Html.LabelFor(model => model.UserName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.UserName)
@Html.ValidationMessageFor(model => model.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Email)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>
<p>
</p>
<p>
<input type="submit" value="Create Beta User" class="btn-submit" />
<span class="loading"></span>
</p>
</div>
}
我的问题是远程验证确实启动了,但是没有将任何内容写入错误消息,而且jQuery方法.valid()
一直告诉我表单有效:
(来源:) 我错过了什么
显示了相同的代码(在可下载文件中)以下代码对我来说很好: 型号:
public class RegisterModel
{
[Required]
[DataType(DataType.EmailAddress, ErrorMessage = "You need to enter a valid email")]
[Remote("EmailExists", "Home", "")]
[Display(Name = "Email address")]
public string Email { get; set; }
}
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(RegisterModel model)
{
return View(model);
}
public ActionResult EmailExists(string email)
{
if ((email ?? string.Empty).Contains("foo"))
{
return Json(email + " is not available", JsonRequestBehavior.AllowGet);
}
return Json(true, JsonRequestBehavior.AllowGet);
}
}
视图:
@model RegisterModel
@使用(Html.BeginForm())
{
@LabelFor(model=>model.Email)
@EditorFor(model=>model.Email)
@Html.ValidationMessageFor(model=>model.Email)
}
我也遇到了同样的问题,通过更新到最新的jQuery(1.6)和jQuery.validate(1.8)库解决了这个问题。获取这些信息的最简单方法是在NuGet中搜索jQuery。Dang,我的根本无法工作:(myValidationMessageFor
在那里,但它从未被填充过……我在控制台中看不到javascript错误,只是……不知道(是的,如果你想知道的话,我的视图中确实有validate.js和unobtrusive.js文件):/@balexandre,您的控制器操作看起来如何?刚刚添加到问题中,但效果很好,因为它正在传递正确的值,正如您在FireBug控制台中看到的那样……我只是用电子邮件创建了一个简单的视图,但我仍然无法获得验证消息:(@balexandre,这很奇怪,因为我无法重现这种行为。它对我很有效。如果你通过电子邮件向我发送一个项目的缩小版本来说明问题,我会很乐意查看它,看看可能是什么问题。哦,需要检查的一件事是,你使用的jquery版本是否与您正在使用的jquery.validate插件的版本。IIRC在jquery 1.5和更早版本的验证插件中出现了一些问题。@Darin正在使用jquery 1.5.2和validation 1.8。请尝试此链接以查看我正在执行的操作的屏幕广播:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(RegisterModel model)
{
return View(model);
}
public ActionResult EmailExists(string email)
{
if ((email ?? string.Empty).Contains("foo"))
{
return Json(email + " is not available", JsonRequestBehavior.AllowGet);
}
return Json(true, JsonRequestBehavior.AllowGet);
}
}
@model RegisterModel
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
@Html.LabelFor(model => model.Email)
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
<input type="submit" value="OK" />
}