0

私はasp.netmvcで開発していますが、今日、ajaxヘルパーの使用に奇妙なことが見られました。

Ajax.BeginForm(...)またはAjax.ActionLink(...)を使用する場合、これらはアクションを非同期的に呼び出し(投稿)せず、通常の形式または通常のリンクとして機能しますが、[リクエスト]をオンにすると.IsAjaxRequest()が動作している場合、trueを返します。

ajaxフォームの場合、私は

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

正常に動作し、フォームを非同期で送信します。

注:jqueryの新しいバージョン以降、jquery.unobtrusive-ajax.minで.live()を.on()に変更する必要があることはわかっています。

また、ここに私の参照された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に戻したところ、正常に動作します。

4

1 に答える 1

1

UnobtrusiveJavaScriptEnabledfalse に設定されているようですね。AppSettings-File を見てください。セクションには次の<appsettings>ものが必要です。

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

編集:

グーグルで1分間検索した後、このリンクを見つけました:

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

jQuery を 1.9.0 に更新した後、目立たない Ajax が機能しなくなった

于 2013-01-25T17:27:51.377 に答える