我正在使用当前版本的ASP.net MVC来显示表单。包含的jQuery Validate会对验证进行验证。客户端验证正在运行,但服务器端验证不是。而是将表单值发送回服务器进行验证,但JS验证代码忽略了服务器的答案。
(简化)表格如下所示:
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm("Invite", "Admin"))
{
@Html.ValidationSummary(true)
<ul class="griditem-list">
<li>
<div class="editor-label">@Html.LabelFor(m => m.UserEmail)</div>
<div class="editor-field">@Html.EditorFor(m => m.UserEmail)</div>
@Html.ValidationMessageFor(m => m.UserEmail)
</li>
</ul>
<div class="actions">
<input class="button" type="submit" value="Add" />
</div>
}
客户端javascript正确检查无效的电子邮件地址,并将电子邮件地址发送回服务器以进行进一步验证。服务器答案正确回发(此处:“此电子邮件地址已被删除”):
但是,该值不会以任何方式显示在编辑器字段附近或其他任何位置。这可能是什么原因?
修改:
这是我正在使用的模型:
public class InvitationUser
{
[Required(ErrorMessage = "{0} darf nicht leer sein.")]
[Email(ErrorMessage = "Die Emailadresse ist ungültig")]
[Remote("EmployeeExists", "Admin", ErrorMessage = "Der angegebene User wurde bereits eingeladen.")]
[Display(Name="E-Mail")]
public string UserEmail { get; set; }
[Required(ErrorMessage = "{0} darf nicht leer sein.")]
[Display(Name = "Vorname")]
public string FirstName { get; set; }
[Required(ErrorMessage = "{0} darf nicht leer sein.")]
[Display(Name = "Nachname")]
public string LastName { get; set; }
public IEnumerable<AdminUserRight> Rights { get; set; }
}
以下是EmployeeExists
,其中回复了“电子邮件地址已存在”的正确结果:
public JsonResult EmployeeExists(string UserEmail)
{
Guid companyId = AzManPrincipal.Current.Employee.BrokerCompany.ID;
var container = new ModelContainer();
if (container.BrokerEmployeeSet.FirstOrDefault(m => m.Email == UserEmail && m.BrokerCompany.ID == companyId) == null &&
container.BrokerInvitationSet.FirstOrDefault(m => m.Email == UserEmail) == null)
return Json(true, JsonRequestBehavior.AllowGet);
string errorMessage = String.Format(CultureInfo.InvariantCulture, "{0} ist bereits registriert.", UserEmail);
return Json(errorMessage, JsonRequestBehavior.AllowGet);
}
这是呈现形式的Index
控制器:
public ActionResult Index()
{
InvitationUser newUser = AdminUserService.CreateInvitationUser();
return View(newUser);
}
答案 0 :(得分:2)
将Jquery更新为1.6.1,将Jquery.validation更新为1.8.1对我有用!
答案 1 :(得分:1)
如果您使用以下属性:
[DataType(DataType.EmailAddress)]
这实际上并不验证电子邮件地址。 MVC 3 Futures中有一个电子邮件地址验证器。如果您只想实施新类型,可以查看以下论坛post,了解其完成情况。