如果在ASP.NET MVC 5应用程序中提交有效表单,则触发模式?

时间:2017-10-12 17:05:54

标签: jquery asp.net-mvc asp.net-mvc-5 jquery-validate unobtrusive-validation

我正在创建一个ASP.NET MVC 5应用程序。用户点击"提交"之间有很长的等待时间。按钮和下一页要加载,所以我想要#34;请等待"仅当用户提交了有效表单时,才会弹出模式。

我尝试了以下代码,无论表单是否有效,都会弹出模式:

V

我的应用程序使用了jQuery Validate插件和不显眼的验证,这些都是在创建MVC应用程序时提供的,所以我尝试了这段代码:

$('form').submit(function () {
    $('#waitingModal').show();
});

但是我收到以下错误:

  

TypeError:$(...)。valid不是函数

NuGet Manager说我正在使用jQuery版本1.11.1,jQuery Validate 1.11.1和jQuery Unobtrusive 3.2.3。

我在代码中遗漏了什么?还有另一种方法吗?

2 个答案:

答案 0 :(得分:0)

感谢您的评论和this post,我能够解决我的问题。在这里为遇到此问题的任何人发布解决方案...

我将.validate()添加到我的代码中,如下所示:

$('form').submit(function () {
  $(this).validate();
  if ($(this).valid()) {
     $('#waitingModal').show();
  }
});

但遇到了同样的错误:

  

TypeError:$(...)。validate不是函数

在谷歌搜索并找到this post后,我想我会尝试重新安排我的脚本标签。即使我的jQuery脚本标记位于我的Layout.cshtml中,我还需要将脚本标记移动到脚本标记列表底部的窗体视图上的jQuery Validate。现在模式正好突然出现了我想要的样子。

修改

根据其他用户的评论,我删除了.validate();从我的代码。所以我的代码又回到了这个:

$('form').submit(function () {
  if ($(this).valid()) {
     $('#waitingModal').show();
  }
});

正如用户所说,代码运行完全正常,没有.validate();事实证明我唯一的问题是我的脚本标签的顺序。

答案 1 :(得分:-1)

您需要使用JQuery的Ajax Callback函数。它可能是一个Http Post或Get Call。为您提交"提交"方案,它应该是一个POST电话。

例如:

var element = $('#dialogContent');
element.html('please wait...');
element.dialog("open");

$.ajax(url, {
                data: { "_": $.now() },
                contentType: 'text/html',
                dataType: 'html',
                type: 'POST'
            }).done(function (data) {
                        setTimeout(function () {
                            element.html(data);
                        }, 100);
                        return false;
            }).fail(function (error) {
                     element.html('Show error information here..');
            }
       );