jquery不引人注目

jquery不引人注目,jquery,unobtrusive-javascript,Jquery,Unobtrusive Javascript,我试图将unobtrusive.js包含到我的mvc3视图中,但是如果我这样做,当视图呈现时,我会得到一系列错误。例外情况是在不引人注目的脚本中,在任何地方它都会根据“未定义”检查任何内容,如这一行 if(message !== undefined) //Compare against undefined, because an empty message is legal 我得到的错误是 Microsoft JScript运行时错误:“未定义”为null或不是对象 这是我的视图的脚本声明 &

我试图将unobtrusive.js包含到我的mvc3视图中,但是如果我这样做,当视图呈现时,我会得到一系列错误。例外情况是在不引人注目的脚本中,在任何地方它都会根据“未定义”检查任何内容,如这一行

if(message !== undefined) //Compare against undefined, because an empty message is legal
我得到的错误是

Microsoft JScript运行时错误:“未定义”为null或不是对象

这是我的视图的脚本声明

<script src="../../Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-ui-1.8.14.custom.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-ui-1.8.11.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script>
<link href="@Url.Content("~/Content/themes/base/jquery.ui.autocomplete.css")" rel="stylesheet" type="text/css" /> 

确保配置中包含以下内容

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


您需要使用
jquery.validate.min.js
而不是
jquery.validate.unobtrusive.js
虽然jquery是开源的,但“jquery.validate.unobtrusive.min.js”库是由Microsoft提供的(如我的js文件顶部所示):

尝试替换库以使用新的替换jquery.validate.min.js

@model SomeProject.Models.PimpModel
@{
  View.Title = "Index";
  Layout = "~/Views/Shared/_Layout.cshtml";
  Html.EnableUnobtrusiveJavaScript(true);
}
<h2>Pimp</h2>
@using (Html.BeginForm()) {
  @Html.ValidationSummary(true)
  <fieldset>
  @Html.ValidationMessageFor(model => model.PimpName)
  <div class="editor-label">
    @Html.LabelFor(model => model.PimpName)
  </div>
  <div class="editor-field">
    @Html.TextBoxFor(model => model.PimpName)
  </div>
  <input type="submit" value="Save"></fieldset>
}
一种方法是通过 以下:

  • 右键单击项目的参考文件夹
  • 选择“添加库包参考…”按钮。
  • 窗口打开时,从左侧边栏菜单中选择“联机”
  • 在右上角,键入“jquery.validate”,然后按enter键
  • 找到“jQuery验证”按钮,然后单击“安装”按钮
  • 更改代码以使用新库名'jquery.validate.min.js'
  • 在Visual Studio中调试时,我测试了这一点,并且客户端字段验证似乎都可以正常工作,没有恼人的异常情况。

    如果您想:

    • 使用.NET模型验证(数据注释属性)
    • 使用html5数据属性而不是非语义css类
    您同时需要:jquery.validate和jquery.validate.unobtrusive

    脚本引用:

    public class PimpModel
    {
      [Required]
      [StringLength(20)]
      [DisplayName("Pimp Name")]
      public string PimpName { get; set; }
    }
    
    注意:在本例中,js文件位于项目/站点的“public”文件夹下,但如果可能,您可以使用Microsoft的Google CDN地址

    <script src="@Url.Content("~/public/js/libs/jquery.validate.min.js")"></script>
    <script src="@Url.Content("~/public/js/libs/jquery.validate.unobtrusive.min.js")"></script>
    
    Web.config设置

     <appSettings>
        <add key="ClientValidationEnabled" value="true"/>
        <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
      </appSettings>
    
    
    
    查看表单代码

    @model SomeProject.Models.PimpModel
    @{
      View.Title = "Index";
      Layout = "~/Views/Shared/_Layout.cshtml";
      Html.EnableUnobtrusiveJavaScript(true);
    }
    <h2>Pimp</h2>
    @using (Html.BeginForm()) {
      @Html.ValidationSummary(true)
      <fieldset>
      @Html.ValidationMessageFor(model => model.PimpName)
      <div class="editor-label">
        @Html.LabelFor(model => model.PimpName)
      </div>
      <div class="editor-field">
        @Html.TextBoxFor(model => model.PimpName)
      </div>
      <input type="submit" value="Save"></fieldset>
    }
    
    @model SomeProject.Models.PimpModel
    @{
    View.Title=“Index”;
    Layout=“~/Views/Shared/_Layout.cshtml”;
    EnableUnobtrusiveJavaScript(true);
    }
    皮条客
    @使用(Html.BeginForm()){
    @Html.ValidationSummary(true)
    @Html.ValidationMessageFor(model=>model.PimpName)
    @LabelFor(model=>model.PimpName)
    @Html.TextBoxFor(model=>model.PimpName)
    }
    

    html助手以html的形式生成数据属性,由unobtrusive library使用,unobtrusive library使用验证库中的函数,这都是快乐的日子…

    谢谢Brandon。这就解决了。对jquery来说还是很陌生的,我的脑子也快崩溃了。如果您想通过html 5数据属性和.NET数据注释在模型上使用不引人注目的验证,您需要两者,请参阅我的答案。您需要将这两个列表作为依赖项。是否需要对模型使用“Pimp”