【问题标题】:Getting the following error in ASP.NET MVC 5: Validation type names in unobtrusive client validation rules must be unique. The [...] required在 ASP.NET MVC 5 中出现以下错误:不显眼的客户端验证规则中的验证类型名称必须是唯一的。所需的
【发布时间】:2020-10-26 08:01:01
【问题描述】:

我正在使用 ASP.NET MVC 5 并尝试使用 [Required] 属性来启用客户端验证。

我收到以下错误:

不显眼的客户端验证规则中的验证类型名称必须是唯一的。多次看到以下验证类型:必需

我在这里搜索过这个错误,但我尝试的任何方法都没有真正的帮助。

Index.cshtml 视图:

@{
    ViewBag.Title = "Login";
}

@model CapitalWorkflowWebApplication.Models.LoginModel

<h2>Login</h2>

@using (Html.BeginForm("login-user", "Login", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    <div class="container">
        <div class="row">
            Login
        </div>
        <div class="row">
            @Html.LabelFor(model => model.Username)
            @Html.TextBoxFor(model => model.Username)
            @Html.ValidationMessageFor(model => model.Username, "", new { @class = "text-danger" })
        </div>
        <div class="row">
            @Html.LabelFor(model => model.Password)
            @Html.TextBoxFor(model => model.Password)
            @Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" })
        </div>
        <div class="row">
            <input type="submit" value="Login" />
        </div>
    </div>
}

登录模型:

using System.ComponentModel.DataAnnotations;

namespace CapitalWorkflowWebApplication.Models
{
    public class LoginModel
    {
        [Required(ErrorMessage = "Le champ utilisateur est obligatoire")]
        [Display(Name = "Utilisateur")]
        public string Username { get; set; }

        [Required(ErrorMessage = "Le champ mot de passe est obligatoire")]
        [Display(Name = "Mot De Passe")]
        [DataType(DataType.Password)]
        public string Password { get; set; }

        public string ErrorMessage { get; set; }
    }
}

按照这里的一些 cmets/questions/answers,我尝试在我的控制器中设置一个断点,并在即时窗口中运行:ModelValidatorProviders.Providers,结果是:

[0]: {System.Web.Mvc.DataAnnotationsModelValidatorProvider}
[1]: {System.Web.Mvc.DataErrorInfoModelValidatorProvider}
[2]: {System.Web.Mvc.ClientDataTypeModelValidatorProvider}

我没有使用任何自定义验证器。

在我的web.config 中,我有这些设置:

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

在我的布局中我确实有:

<script src="@Url.Content("~/Scripts/jquery-3.3.1.js")" type="text/javascript"></script>
<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>

到目前为止我尝试了什么:

  • 我从 LoginModel 中删除了 [Required] 属性,这消除了错误,但也删除了客户端验证,这不是预期的结果。
  • 我在我的应用程序启动代码中添加了DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;,但错误始终存在。
  • 我尝试将 web.config 中的 ClientValidationEnabled 键设置为 false,但将 UnobtrusiveJavaScriptEnabled 保持为 true。它会删除错误,但不会删除客户端验证,呵呵。
  • 我还尝试将UnobtrusiveJavaScriptEnabled 键设置为假,并保持ClientValidationEnabled 为真。它也消除了错误,但我没有看到任何客户端验证。它总是发回给控制器。

注意1:我在@Html.TextBoxFor(model=&gt;model.Username);行的视图中调试时遇到错误

注意 2:我使用 Ninject 作为依赖解析器,如果需要,我会发布我的 ninject 配置类,因为我看到一些 cmets 说它可能是 DI 容器导致了这个问题。

我可能面临的问题是什么,以及如何解决?

【问题讨论】:

    标签: c# validation asp.net-mvc-5


    【解决方案1】:

    经过一番挖掘和专门搜索有关Ninject的问题,结果发现问题的根源实际上是Ninject。

    为了修复这个错误,我在创建内核时添加了这个:

    kernel.Unbind<ModelValidatorProvider>();
    

    添加后,错误消失了,客户端验证按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多