jquery验证始终返回true

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

我使用的是MVC4 w/JQuery,我使用@Ajax.BeginForm创建了一个表单。它具有必填字段(在其视图模型上设置)。我正在尝试在表单提交之前对其进行验证;然而,它似乎没有得到验证

我原来有一个提交按钮,它只是提交表单。我将submit按钮更改为常规按钮,并尝试调用$('#formname').validate(),但它始终返回true(即使未填写必填字段)。其他视图似乎工作正常(不使用Ajax.BeginForm)

我引用的是jquery、jquery ui、jquery.validate、jquery.validate.unobtrusive和jquery.unobtrusive-ajax

有人有什么想法/建议吗?我缺少什么

编辑---------------------------------------------------------------------------

下面是我的代码(在引用jquery脚本的母版页中):

@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)