jquery - MVC 4 客户端验证不起作用

标签 jquery asp.net-mvc-4 jquery-validate unobtrusive-validation

谁能告诉我为什么客户端验证在我的 MVC 4 应用程序中不起作用。

_layout.schtml

@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", required: false)

在我的 web.config 中,我有:

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

在我的 login.cshtml 页面中,我有:

@using (Html.BeginForm())
{
    <div class="formscontent">

        <ol>
            <li>
                @Html.LabelFor(x => x.AgreementNumber)
                <br />
                @Html.TextBoxFor(x => x.AgreementNumber, new { size = "30" })
                <br />
                @Html.ValidationMessageFor(m => m.AgreementNumber)
                <br />
                <br />
            </li>
            <li>
                @Html.LabelFor(x => x.UserName)
                <br />
                @Html.TextBoxFor(x => x.UserName, new { size = "30" })
                <br />
                @Html.ValidationMessageFor(m => m.UserName)
                <br />
                <br />
            </li>
            <li>
                @Html.LabelFor(x => x.Password)
                <br />
                @Html.PasswordFor(x => x.Password, new { size = "30" })
                <br />
                @Html.ValidationMessageFor(m => m.Password)
                <br />
                <br />
            </li>
        </ol>

    </div>
    
    <ol>
        <li>
            @Html.CheckBoxFor(m => m.RememberMe)
            @Html.LabelFor(m => m.RememberMe, new { @class = "checkbox" })
        </li>
    </ol>
    
    <br />
    
    <input class="mainbutton" type="submit" value="@Model.Localisation.TranslateHtmlString("LogonBtn")" /><br />
    <div style="text-align: left; padding: 0 5px 5px 10px;">
        Forgot login-info? clik <a class="link" href="@Url.Action("Index", "Credentials")">here.</a>
    </div>
    
}

登录页面底部:

@section Scripts {
  @Scripts.Render("~/bundles/jqueryval")
}

我的浏览器启用了 JavaScript。在 Visual Studio 的 MVC 4 模板项目中,客户端验证工作正常。

运行应用程序,在登录页面上查看页面源代码时,我看到呈现的内容:

<label for="AgreementNumber">number</label>
<br />
<input id="AgreementNumber" name="AgreementNumber" size="30" type="text" value="387893" />
<br />
<span class="field-validation-valid" data-valmsg-for="AgreementNumber" data-valmsg-  replace="true"></span>

在底部:

<script src="/BMWebsite/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="/BMWebsite/Scripts/jquery.validate.inline.js"></script>
<script src="/BMWebsite/Scripts/jquery.validate.js"></script>
<script src="/BMWebsite/Scripts/jquery.validate.unobtrusive.js"></script>

我的模型属性已注释:

public class LogonModel : ModelBase
{
    [MyRequired("AgreementNumberRequiredProperty")]
    [MyDisplay("AgreementNumberLabel")]
    public string AgreementNumber { get; set; }

    [MyRequired("UserNameRequiredProperty")]
    [MyDisplay("UserNameLabel")]
    public string UserName { get; set; }

    [MyRequired("PasswordRequiredProperty")]
    [DataType(DataType.Password)]
    [MyDisplay("PasswordLabel")]
    public string Password { get; set; }

    [MyDisplay("RememberMeCheckBox")]
    public bool RememberMe { get; set; }
}

MyRequired 是从常规的RequiredAttribute 派生的类。原因是我的错误消息是通过重写 RequiredAttribute 类的 FormatErrorMessage(string name) 方法来本地化的。它工作正常 - 我的标签和错误消息已本地化。

MyRequired.cs

public class MyRequiredAttribute : RequiredAttribute
{
    private readonly string _errorMessagekey;

    public MyRequiredAttribute(string errorMessage)
    {
        _errorMessagekey = errorMessage;
    }

    public override string FormatErrorMessage(string name)
    {
        var translation = HttpContext.Current.Session["translation"] as LocalisationHelper;

        return translation != null ? translation.Translate(_errorMessagekey) : ErrorMessage;
    }
}

我在登录操作方法的 POST 版本中放置了一个断点,并且它被命中。该表单被发布到发生服务器端验证的服务器。客户端验证不会发生。

我错过了什么?

谢谢。

最佳答案

我也遇到了同样的问题。似乎未加载不显眼的验证脚本(请参阅最后的屏幕截图)。我通过在 _Layout.cshtml 末尾添加来修复它

 @Scripts.Render("~/bundles/jqueryval")

最终结果:

   @Scripts.Render("~/bundles/jquery")
   @Scripts.Render("~/bundles/jqueryval")
   @RenderSection("scripts", required: false)

除了我相当标准的 CRUD View 之外,所有内容都是 Visual Studio 项目模板默认值。

解决问题后加载的脚本: enter image description here

关于jquery - MVC 4 客户端验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14520336/

相关文章:

javascript - jQuery - 文本装饰下划线切换

javascript - ScrollMagic 在不同窗口高度上的偏移

c# - 我应该在 MVC 4 中的哪里存储 SQL 查询?

javascript - 使用 jQuery 验证具有通用规则的表单

javascript - 在用户写入时验证表单输入文本

javascript - jQuery 动态对齐

asp.net-mvc-4 - 初始化 MVC 4 中的简单成员资格

asp.net-mvc - 如何与 NopCommerce MVC 进行团队合作

javascript - 如何检查 HTML 标签,然后在 jQuery 验证中添加错误

javascript - JQuery 验证 : how to place error messages inside the input's title attribute