【问题标题】:jQuery forms server-side validation messages not displayedjQuery 表单服务器端验证消息不显示
【发布时间】:2011-05-23 15:11:51
【问题描述】:

我正在使用当前版本的 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,它回发“Email address already exists”的正确结果:

    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);
    }

【问题讨论】:

    标签: jquery asp.net-mvc


    【解决方案1】:

    将 Jquery 更新到 1.6.1 并将 Jquery.validation 更新到 1.8.1 对我有用!

    【讨论】:

      【解决方案2】:

      如果您使用以下属性:

      [DataType(DataType.EmailAddress)]
      

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

      【讨论】:

      • 电子邮件地址被正确验证为电子邮件地址,但未显示服务器端验证(检查电子邮件地址是否已被占用)。
      • 你能用你的模型/控制器和它使用的任何属性更新你的问题吗?
      • 完成。您可能还需要什么?
      猜你喜欢
      • 2020-12-26
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 2014-06-22
      • 1970-01-01
      相关资源
      最近更新 更多