0

アップデート2:

jQueryバージョンの互換性の問題。

アップデート1:

スクリプトリファレンスにタイプミスがありました。しかし、私は今この問題に遭遇します:

TypeError: $(...).live is not a function

$("a[data-ajax=true]").live("click", function (evt) {

=====================================

コントローラーでajax.beginformを介して有効なフォームを送信すると、コールバック関数によって処理される代わりにビューに表示されるJSONが返され、その理由がわかりません。

誰かに馴染みがあるように見える場合に備えて、ネットからデモプロジェクトを取りました。

HTML / JS

@model Unobtrusive_Validation.Models.BlogPost

<html>
    <head>
    </head>
    <body>
        <script src="~/Scripts/jquery-1.9.1.js"></script>
        <script src="~/Scripts/jquery.validate.js"></script>
        <script src="~/Scripts/jquery.validate.unobtrusive.js"></script>
        <script src="~/Scripts/jquery.unobtrusive.ajax.js"></script>

        @using (Ajax.BeginForm("Test", "BlogPost",
            new AjaxOptions{
                HttpMethod = "POST",
                OnSuccess = "OnSuccess",
                OnBegin = "alert('OnBegin')",
                OnComplete = "alert('OnComplete')",
                OnFailure = "alert('OnFailure')"
            } )
        )
        {
            @Html.ValidationSummary(true)

            <fieldset>
                <legend>BlogPost</legend>

                <div class="editor-label">
                    @Html.LabelFor(model => model.PostedOn)
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => model.PostedOn)
                    @Html.ValidationMessageFor(model => model.PostedOn)
                </div>

                <div class="editor-label">
                    @Html.LabelFor(model => model.Title)
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => model.Title)
                    @Html.ValidationMessageFor(model => model.Title)
                </div>

                <div class="editor-label">
                    @Html.LabelFor(model => model.Content)
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => model.Content)
                    @Html.ValidationMessageFor(model => model.Content)
                </div>

                <div class="editor-label">
                    @Html.LabelFor(model => model.Category)
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => model.Category)
                    @Html.ValidationMessageFor(model => model.Category)
                </div>

                <p>
                    <input type="submit" value="Create" />
                </p>
            </fieldset>
        }
    </body>

    <script type='text/javascript'>
        function OnSuccess(result) {
            console.log(result);
            if (result.success == false) {
                alert("failed");
            }
        }
    </script>
</html>

コントローラ:

public class BlogPostController : Controller
{
    // GET: /BlogPost/Create

    public ActionResult Create()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Test(BlogPost _model)
    {
        return Json(new {success = false} );
    }
}

Web.config

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

2 に答える 2

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

する必要があります:

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

FireBugやChromeDeveloperツールバーなどのJavaScriptデバッグツールを使用して[ネットワーク]タブを確認した場合、ブラウザがタイプミスのために指定した存在しないファイルを取得しようとすると、すぐに404エラーが表示されます。

</body>また、すべてのjavascriptファイルをDOMの最後、終了タグの直前に配置することをお勧めします。

話の教訓:FireBugやChrome開発者ツールバーなどのJavaScriptデバッグツールを使用します。そのようなツールを使わずにWeb開発をしている人を想像することはできないでしょう。


アップデート:

また、jQuery 1.9では、.live() method has been removedこれが重大な変更の1つであったことにも注意してください。残念ながら、ASP.NETMVCの控えめなajaxスクリプトはこの関数に依存しています。したがって、MVCで控えめなJavaScript機能の一部を使用する場合は、古いバージョンのjQueryを使用する必要があります。

于 2013-02-16T14:48:26.130 に答える
0

はい

jquery.unobtrusive-ajax.js
jquery 1.9以降の上位バージョンとは互換性がありません

これを使用するには、jquery-migrate を追加してください: Migrate old jQuery code to jQuery 1.9+ js files

<script src="http://code.jquery.com/jquery-1.9.0.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.js"<</script>

それはあなたの時間を節約します。

詳細については、こちらをご覧ください。 http://www.learnsharecorner.com/ajax-begin-form-onsuccess-is-not-working-asp-net-mvc/

于 2014-11-13T09:12:44.840 に答える