Javascript事件处理程序不拦截表单提交
我使用的是asp.net mvc 4 razor,我有一个主视图,它有一些复选框和一个提交按钮。 这些复选框表示要执行的任务。 用户通过复选框选择要执行的任务,然后通过单击提交按钮启动该过程。 我有一个div块,我想在控制器中放置操作的进度,它们当前正在完成的任务。
单击提交按钮后,我想要启动第一个脚本(主要脚本),然后完成下一个任务。
问题是,第一个主要脚本然后按顺序调用其他脚本不会被调用。
我正在使用ASP.NET MVC 4
代码下面。
视图:
@using (Html.BeginForm( "PerformTasks", "Tests", FormMethod.Post, htmlAttributes: new { id = "frm" })) { (...) @Html.CheckBoxFor(m => m.task01)Task 1
@Html.CheckBoxFor(m => m.task02)Task 2
(...) } // First ajax script $("#frm").submit(function (event) { $("#frm").validate(); if ($("#frm").valid()) { $.ajax({ url: "/Tests/PerformTasks/", type: 'POST', data: $("#frm").serialize(), success: function() { perFormTask1(); }, beforeSend: function() { $("#divStatus").append('
Begginig tasks...
'); } }); event.preventDefault(); } }); // second ajax script function performTask1() { $.ajax({ url: "/Tests/Task1/", type: 'POST', data: $("#frm").serialize(), success: function() { $("#divStatus").append('Task1 completed.
'); perFormTask2(); }, beforeSend: function() { $("#divStatus").append('
Begginig task 1...
'); } }); }; function performTask2() { $.ajax({ url: "/Tests/Task2/", type: 'POST', data: $("#frm").serialize(), success: function() { $("#divStatus").append('Task2 completed.
'); }, beforeSend: function() { $("#divStatus").append('
Begginig task 2...
'); } }); };
Controller(\ Controllers下的TestsController.cs):
public class TestsController : Controller { [HttpPost] public ActionResult PerformTasks(ViewModel model) { // Nothing to do here, tasks are done individually in the methods below. // To stay in the same page after submit button is clicked return Redirect(this.Request.UrlReferrer.AbsolutePath); } [HttpPost] public ActionResult Task1(ViewModel model) { // Task 1 should be done if checkbox in the main view is checked, otherwise not. bool doTask1 = model.task01; if (doTask1 ) { // Do some stuff } // To stay in the same page after submit button is clicked return Redirect(this.Request.UrlReferrer.AbsolutePath); } [HttpPost] public ActionResult Task2(ViewModel model) { // Task 2 should be done if checkbox in the main view is checked, otherwise not. bool doTask2 = model.task02; if (doTask2) { // Do some stuff } // To stay in the same page after submit button is clicked return Redirect(this.Request.UrlReferrer.AbsolutePath); } }
视图模型:
public class ViewModel { public bool task01{ get; set; } public bool task02{ get; set; } }
我有以下问题:
- 我应该放,而不是因为如果没有,我收到错误消息javascript’$’未定义
- 这个脚本$(“#frm”)。submit(function(event){… // body …}没有被执行,所以其余的动作都没有完成。所以第一个脚本的事件完成是没有达到。
注意:我已检查到达控制器中的PerformTasks操作。 未到达控制器上的其他操作Task1,Task2。 在脚本而不是成功我尝试完成但没有成功。 此外,我试图在JsonResult控制的操作中替换ActionResult,并返回返回Redirect(…)以返回Json(“”)但也没有成功。
似乎Javascript事件处理程序没有拦截表单提交。
有任何想法吗?
代码生成:
然后在脚本下面:
alert("Within Script"); $("#frm").submit(function (event) { .. }); ...
脚本与此处发布的相同。
您没有在document.ready中包含表单提交处理程序,它将在表单在DOM中之前激活。
我认为你的第一个forms是做一个完整的回发。 如果您在执行表单提交时监视chrome中的网络选项卡,如果您看到它是由jquery或类似的请求,您知道您正在进行部分回发。
心连心
- 如何将在texbox中输入的值传递给PartialViewResult?
- 在UpdatePanel中使用JQuery UI datepicker
- 在ajax调用中不存在所需的防伪表单字段“__RequestVerificationToken”
- Jquery的Asp.Net 2.0的Ajax属性
- 带有HTML.ValidationMessageFor的ASP.NET MVC AJAX
- 在ASP.Net Microsoft AJAX之后执行JQuery
- ASP.NET Ajax部分回发和jQuery问题
- 在Javascript中动态设置(当前是静态的)图像数组
- 尝试使用jQuery ajax和MVC显示JSONResult时出现内部服务器错误#500