jquery验证始终返回true
我使用的是MVC4 w/JQuery,我使用@Ajax.BeginForm创建了一个表单。它具有必填字段(在其视图模型上设置)。我正在尝试在表单提交之前对其进行验证;然而,它似乎没有得到验证 我原来有一个提交按钮,它只是提交表单。我将submit按钮更改为常规按钮,并尝试调用$('#formname').validate(),但它始终返回true(即使未填写必填字段)。其他视图似乎工作正常(不使用Ajax.BeginForm) 我引用的是jquery、jquery ui、jquery.validate、jquery.validate.unobtrusive和jquery.unobtrusive-ajax 有人有什么想法/建议吗?我缺少什么 编辑--------------------------------------------------------------------------- 下面是我的代码(在引用jquery脚本的母版页中):jquery验证始终返回true,jquery,asp.net-mvc,asp.net-mvc-4,unobtrusive-validation,Jquery,Asp.net Mvc,Asp.net Mvc 4,Unobtrusive Validation,我使用的是MVC4 w/JQuery,我使用@Ajax.BeginForm创建了一个表单。它具有必填字段(在其视图模型上设置)。我正在尝试在表单提交之前对其进行验证;然而,它似乎没有得到验证 我原来有一个提交按钮,它只是提交表单。我将submit按钮更改为常规按钮,并尝试调用$('#formname').validate(),但它始终返回true(即使未填写必填字段)。其他视图似乎工作正常(不使用Ajax.BeginForm) 我引用的是jquery、jquery ui、jquery.valid
@model AimOnlineMRA.Models.Reports.DateRangeViewModel
@使用(Ajax.BeginForm(“GetReport”、“Reports”),新的AjaxOptions
{
UpdateTargetId=“report_pane”,HttpMethod=“Post”},new{@id=“parameterForm”})
{
@Html.AntiForgeryToken()
$(文档).ready(函数(){
ApplyTheme();
$('#btnYes')。单击(函数(){
$('RunSpecificDateRange').val('true');
$('yesNo').hide();
$('#dateRangeForm').show();
});
$('#btnCancel')。单击(函数(){
$('#报告窗格').html(''.hide();
});
$('#btnOk')。单击(函数(){
//if($('#parameterForm').valid(){
//警报(“有效”);
//}否则{
//警报(“无效”);
//}
});
$(“#dateRangeForm”).hide();
$('#BeginDate')。日期选择器({
showOn:'按钮',
buttonText:'日期选择器',
buttonImageOnly:正确,
buttonImage:“@Url.Content(“~/Content/Icons/calendar icon.png”)”
});
$('#EndDate')。日期选择器({
showOn:'按钮',
buttonText:'日期选择器',
buttonImageOnly:正确,
buttonImage:“@Url.Content(“~/Content/Icons/calendar icon.png”)”
});
});
是否要在特定日期范围内运行此报告?
@Html.按钮(“是”、“btnYes”)
@按钮(“否”、“btnNo”)
日期范围
@Html.LabelFor(x=>x.BeginDate)
@TextBoxFor(x=>x.BeginDate,新的{@style=“vertical align:top”})
@Html.ValidationMessageFor(x=>x.BeginDate)
@Html.LabelFor(x=>x.EndDate)
@TextBoxFor(x=>x.EndDate,新的{@style=“垂直对齐:顶部”})
@Html.ValidationMessageFor(x=>x.EndDate)
@按钮(“Ok”、“btnOk”)
@按钮(“取消”、“取消”)
}
-----------------决议-----------------------------
调用
$.validator.unobtrusive.parse($('#parameterForm')
在$('#parameterForm').valid()之前
修复了问题您是否将required添加到
或
的HTML标记中
即:
试试看
$.validator.unobtrusive.parse($('#parameterForm'))
打电话之前
$(“#parameterForm”).valid()
这个问题已经有了一个公认的答案,但对于将来发现这个问题的人来说,还有一个可能的原因
确保表单中第一个经过验证的元素具有name
属性,如下所示:
<input type=text required name='blah' />
我花了两个小时跟踪同一问题,发现如果表单中第一个经过验证的元素具有name
属性,那么一切都会按照您的预期工作(即,如果表单无效,.valid()
将返回false)。其他经过验证的元素是否具有名称属性似乎没有什么区别
在正常形式中,您肯定需要name属性,因为数据提交到服务器时会使用name属性。但在更现代的环境中,如使用敲除的环境中,没有理由在输入元素上具有
名称属性,因为数据绑定可以保持数据模型的更新。我引用了两个文件:
- jquery.validate.js
- jquery.validate.unobstructive.js适用于谷歌-当您的MVC路线中没有合适的路线时,也会发生这种情况。
例如,如果发布的表单元素的
名称不在包含列表中,则可能会出现错误
// make sure the list matches your form elements.
public ActionResult Edit([Bind(Include = "Username,FullName,Email")] User user)
请确保您的表单名称与包含列表中的表单名称匹配,或者一起删除Bind属性(如果您不介意牺牲安全性)。请发布一些相关代码,或者使用jsfiddle.net您的模型在指定字段上是否具有[Required]属性?您是否使用Razor HtmlHelpers创建输入?是的,我在vm上有[Required],并且使用Razor helper创建了输入。这是我在chrome中查看它时输出的必需字段之一try$.validator.unobtrusive.parse($(“#parameterForm”)
,然后调用$(“#parameterForm”).valid()!!我在表单viewmodel上有[Required]属性。查看浏览器中的html输出,我有以下内容(对于其中一个必填字段):这些脚本根本不冲突jquery.validate.js
是jquery.validate.unobtrusive.js
工作所必需的。你一定把它放在别的地方了。你一直把它贴在各处。这不是答案。为我节省了一些时间:)感谢添加“name”属性的帮助,但我仍然得到validator=true(jQuery验证插件-v1.13.0)。所以我
<input type=text required name='blah' />
// make sure the list matches your form elements.
public ActionResult Edit([Bind(Include = "Username,FullName,Email")] User user)