jquery 验证总是返回 true

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

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

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

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

有人对我缺少的东西有任何想法/建议吗?

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

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

@model AimOnlineMRA.Models.Reports.DateRangeViewModel 

@using (Ajax.BeginForm("GetReport", "Reports", new AjaxOptions
{
    UpdateTargetId = "report_pane", HttpMethod = "Post"}, new {@id="parameterForm"}))
{
    @Html.AntiForgeryToken()

<script type="text/javascript">
    $(document).ready(function () {
        ApplyTheme();

        $('#btnYes').click(function() {
            $('#RunSpecificDateRange').val('true');

            $('#yesNo').hide();
            $('#dateRangeForm').show();
        });

        $('#btnCancel').click(function () {
            $('#report_pane').html('').hide();
        });

        $('#btnOk').click(function () {
            //if ($('#parameterForm').valid()) {
            //    alert('valid');
            //} else {
            //    alert('invalid');
            //}
        });

        $('#dateRangeForm').hide();

        $('#BeginDate').datepicker({
            showOn: 'button',
            buttonText: 'Date Picker',
            buttonImageOnly: true,
            buttonImage: '@Url.Content("~/Content/Icons/calendar-icon.png")'
        });

        $('#EndDate').datepicker({
            showOn: 'button',
            buttonText: 'Date Picker',
            buttonImageOnly: true,
            buttonImage: '@Url.Content("~/Content/Icons/calendar-icon.png")'
        });
    });
</script>

<div class="margin-auto" style="width: 400px">

    <div id="yesNo">
        <span class="bold">Do you want to run this report for a specific date range?</span> 
        <br /><br />
        @Html.Button("Yes", "btnYes")
        @Html.Button("No", "btnNo")
    </div>
    <div id="dateRangeForm">
        <span class="bold">Date Range</span> 
        <br /><br />
        <div class="left">
            <div class="left clear-both">
                @Html.LabelFor(x => x.BeginDate) <br />
                @Html.TextBoxFor(x => x.BeginDate, new {@style="vertical-align:top"})
                @Html.ValidationMessageFor(x => x.BeginDate)
            </div>
            <div class="left clear-both m-top-5">
                @Html.LabelFor(x => x.EndDate) <br />
                @Html.TextBoxFor(x => x.EndDate, new {@style="vertical-align:top"})
                @Html.ValidationMessageFor(x => x.EndDate)
            </div>
        </div>
        <div class="left m-left-10">

        </div>
        <div class="left clear-both m-top-10">
            @Html.Button("Ok", "btnOk")
            @Html.Button("Cancel", "btnCancel")
        </div>
    </div>
</div>
}

-----------------解决方案-----------------------------------------

$('#parameterForm').valid(); 之前调用 $.validator.unobtrusive.parse($('#parameterForm')); 修复了问题

最佳答案

尝试

$.validator.unobtrusive.parse($('#parameterForm'))

打电话之前

$('#parameterForm').valid()

关于jquery 验证总是返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17881726/

相关文章:

javascript - 检查具有相同类的两个元素的两个 ID 是否相等

javascript - 根据 JSON 数据添加类

jquery - 如何使用 jQuery 加载外部 html

c# - 如何更新 EF 中的相关实体(代码优先)

asp.net-mvc - 重载asp.net MVC + Web API应用和异步消息总线的设计注意事项

c# - 对于某些 400 错误,ASP.NET MVC customError 页面不会显示

javascript - 将 HTML 添加到元素的末尾。没有错误;没有添加 HTML

c# - 从客户端 MVC4 检测到潜在危险的 Request.Form 值

javascript - 将值从页面传递到 Bootstrap 模式和操作结果

asp.net - 如何在 mvc4 中调用另一个 Controller 的 View