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} );
    }
}

网页配置

<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>

如果您使用了 javascript 调试工具(例如 FireBug 或 Chrome 开发人员工具栏)并查看了“网络”选项卡,那么当浏览器尝试检索由于输入错误而指定的不存在的文件时,您会立即看到 404 错误。

我还建议您将所有 javascript 文件放在 DOM 的末尾,就在结束</body>标记之前。

故事的寓意:使用 javascript 调试工具,例如 FireBug 或 Chrome 开发者工具栏。我无法想象一个人在不使用这样的工具的情况下进行 Web 开发。


更新:

还要记住,在 jQuery 1.9 中,.live() method has been removed这是重大更改之一。不幸的是 ASP.NET MVC 的 unobtrusive-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>

that would save your time.

for more detail here you go. http://www.learnsharecorner.com/ajax-begin-form-onsuccess-is-not-working-asp-net-mvc/

于 2014-11-13T09:12:44.840 回答