mvc中的ajax助手非异步调用

时间:2013-01-25 17:14:18

标签: asp.net-mvc-3 jquery

我正在使用asp.net mvc进行开发,今天我在使用ajax助手方面看到了一些奇怪的事情。

如果我使用Ajax.BeginForm(...)或Ajax.ActionLink(...),它们不会异步调用(发布到)操作,它们可以正常形式或普通链接工作,但是我检查Request.IsAjaxRequest()是否正常,它返回true。

对于ajax表单,我使用

$('#createqfrm').submit(function () {...}

并且工作正常,并以异步方式发送表单。

注意:我知道我必须在jquery.unobtrusive-ajax.min中将.live()更改为.on(),因为新版本的jquery。

这里也是我引用的java库:

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

已修改

检查Request.IsAjaxRequest()并看到它返回false。

已添加行动代码:

public ActionResult GetStriing()
        {
            if (Request.IsAjaxRequest())
            {
                return Json("ajax called",JsonRequestBehavior.AllowGet);
            }
            else
            {
                return Json("ajax not called", JsonRequestBehavior.AllowGet);
            }

        }

表单的html代码的一部分:

<form action="/admin/xxxx/create" data-ajax="true" data-ajax-success="handeCreateQuestionnareSuccess" id="form0" method="post">        <div class="editor-label">
            <label for="Title">title</label>
        </div>
        <div class="editor-field">
            <input class="text-box single-line" data-val="true" data-val-required="*" id="Title" name="Title" type="text" value="" />
            <span class="field-validation-valid" data-valmsg-for="Title" data-valmsg-replace="true"></span>
        </div>
        <div class="editor-label">
            <label for="Status">Status</label>
        </div>
....

 <script type="text/javascript">

        function handeCreateQuestionnareSuccess(context) {
            debugger;
            if (context) {

                $("#CreateQuestionnarieform").empty().html(context[1]);
                $("#CreateQuestionnarieform").append('<input type=hidden name=questionnarieid value=' + context[2] + '/>');

            } else {

                $("#CreateQuestionnarieform").empty().html(context[1]);

                $("form").removeData("validator");
                $("form").removeData("unobtrusiveValidation");
                $.validator.unobtrusive.parse("form");
            }
        }
    </script>

使用ajax调用提交表单的代码:

$('#createqfrm').submit(function () {

                if ($(this).valid()) {
                    $.ajax({
                        url: this.action,
                        type: this.method,
                        data: $(this).serialize(),
                        success: function (context) {



                        }
                    });
                }
                return false;
            });

不是解决方案,但可以通知其他用户:

问题在于jquery 1.9.0和我从nuget获得的更新jquery.validate.min.js和jquery.validate.unobtrusive.min.js我改回1.8.3并且它工作正常... ..

1 个答案:

答案 0 :(得分:1)

听起来UnobtrusiveJavaScriptEnabled听起来像是假的。看看你的AppSettings-File。在<appsettings>部分中应该有:

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

修改

在谷歌搜索一分钟后找到了这个链接:

http://forums.asp.net/t/1877166.aspx/1?jquery+unobtrusive+ajax+js+error+with+jQuery+1+9+0+updated

Unobtrusive Ajax stopped working after update jQuery to 1.9.0