Ajax.BeginForm没有运行“OnSuccess”功能

时间:2014-09-18 03:58:40

标签: jquery ajax asp.net-mvc

尝试使用MVC Ajax助手时遇到了一个奇怪的问题。我在jquery本身制作ajax帖子没有问题,但我想避免手动获取所有表单参数。

症状
而不是我的OnSuccess函数运行asp实际上像我这样渲染我的Json对象 enter image description here

以下是我的代码的关键代码段。我必须失去一些微不足道的东西。

查看

 @using (Ajax.BeginForm("ParkingRequest", null, new AjaxOptions()
            {
                HttpMethod = "POST",
                OnSuccess = "SaveComplete",
            }, new { @class = "form-horizontal", role = "form" }))
            {  

Javascript

function SaveComplete(result)
    {
        if(result.success == true)
        {
            $("#confirmation-message").fadeIn();
        }
        else
        {
            if(result.reason != "You should only be selecting one date.")
            {
                $("#failure-message").fadeIn();
            }
            else
            {
                //user somehow bypassed javascript and tried to enter multiple dates
                alert(result.reason);
            }

        }
    }  

控制器

 public async Task<JsonResult> ParkingRequest(Models.FormsViewModels.ParkingRequestEditViewModel vm)
 return Json(new
        {
            success = true
        });

4 个答案:

答案 0 :(得分:1)

我知道这是旧的,但我最近遇到了同样的问题。我假设你现在已经找到了合适的解决方案,但是我会把它留在这里以防万一其他人遇到类似的东西。

您是如何提交表格的?在我的情况下,我希望表单在任何更改时提交(在这种情况下,表单只有几个复选框)我的问题是我试图通过javascript提交表单,如下所示:

perl -S scan-build %*

无论出于何种原因,如果通过javascript触发,似乎不引人注意的ajax库不会异步提交表单。但是,如果通过HTML提交按钮触发,它将 异步提交。

要为我的用例解决此问题,我在表单中添加了一个隐藏的提交按钮,并将我的javascript更改为单击onchange:

<input type="checkbox" onchange="this.form.submit();" ... />

瞧! AJAX助手现在实际上是异步提交的。是的,我知道它有点hacky但它​​对我有用。

答案 1 :(得分:0)

表单实际上是在提交非异步POST请求。 javascript没有拦截它。

检查您是否包含了必要的jQuery库,并且没有抛出任何javascript错误。

答案 2 :(得分:0)

你可能会丢失包括jquery.unobtrusive-ajax.js文件或渲染jqeryval试试这个

<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
  

或_Layout.cshtml

@Scripts.Render("~/bundles/jqueryval")
  

Async方法应该是

public async Task<JsonResult> ParkingRequest(Models.FormsViewModels.ParkingRequestEditViewModel  vm)
    {
        // do stuff here....
        var result = await Task.Run(() =>
        {
            return Json(new { success = true });
        });

        return result;
    }
另一方面,你最终会发出警告。 但我建议你只使用Ajax Jquery请求。 希望它能帮到你

答案 3 :(得分:0)

确保您已将以下脚本包含在您的页面中:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

并且您已在web.config中启用了不显眼的javascript:

<add key="UnobtrusiveJavaScriptEnabled" value="true" />

这使得像Ajax.BeginForm这样的Ajax。*助手能够正常工作。

相关问题