jQuery形成未显示的服务器端验证消息

时间:2011-05-23 15:11:51

标签: jquery asp.net-mvc

我正在使用当前版本的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);
    }

2 个答案:

答案 0 :(得分:2)

将Jquery更新为1.6.1,将Jquery.validation更新为1.8.1对我有用!

答案 1 :(得分:1)

如果您使用以下属性:

[DataType(DataType.EmailAddress)]

这实际上并不验证电子邮件地址。 MVC 3 Futures中有一个电子邮件地址验证器。如果您只想实施新类型,可以查看以下论坛post,了解其完成情况。