jquery不引人注目
我试图将unobtrusive.js包含到我的mvc3视图中,但是如果我这样做,当视图呈现时,我会得到一系列错误。例外情况是在不引人注目的脚本中,在任何地方它都会根据“未定义”检查任何内容,如这一行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或不是对象 这是我的视图的脚本声明 &
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>
}
一种方法是通过
以下:
- 使用.NET模型验证(数据注释属性)
- 使用html5数据属性而不是非语义css类
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”