我在简单的ASP.NET MVC应用程序中使用Ajax.BeginForm()时遇到问题。我已经在SO中寻找解决方案,但发现没有任何帮助。

我使用默认的Visual Studio 2015模板创建了一个新项目。我已将Index.cshtml文件更改为:

@{
    ViewBag.Title = "Home Page";
}

<div class="jumbotron">
    <h1>ASP.NET</h1>
    <p class="lead">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS and JavaScript.</p>
    <p><a href="http://asp.net" class="btn btn-primary btn-lg">Learn more &raquo;</a></p>
</div>

<div class="row">
    <div id="ajax-test"></div>

    @using (Ajax.BeginForm("Test", new AjaxOptions()
    {
        UpdateTargetId = "ajax-test",
        InsertionMode = InsertionMode.Replace
    }))
    {
        <input type="submit" />
    }
</div>

我在HomeController中添加了一个新操作:
    public ActionResult Test()
    {
        return PartialView("Test");
    }

一个新的 View Home\Test.cshtml:
Hello world

而且,至关重要的是,我在_Layout.cshtml中添加了对所需JavaScript文件的引用(将它们移至页面顶部无济于事)。
    ...
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/bundles/bootstrap")
    @RenderSection("scripts", required: false)
</body>
</html>

我已经验证了Debug模式下的jqueryval捆绑包呈现为:
<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>

这些条目已经存在于web.config文件中:
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

我希望当我按Submit(提交)时,div中将填充“Hello world”。而是将整个页面替换为“Hello world”,并将浏览器重定向到/Home/Test。开发人员工具中未报告任何错误。

谜题的哪一个要素缺失?我知道之前在StackOverflow上也曾问过类似的问题,但通常的答案是包括这些JavaScript文件,而我确实这样做了。以上是我对模板项目所做的所有更改,因此我看不到可能会破坏的地方。

最佳答案

我已经奋斗了几个小时,并在StackOverflow上发布5分钟后设法找到了解决方案。典型的。

我必须安装一个NuGet包Microsoft.jQuery.Unobrusive.Ajax(默认情况下未安装),然后在页面上添加对jquery.unobtrusive-ajax.js的引用。我以为它已经合并到jquery.validate.unobtrusive.js之类的东西中,但是没有。

关于Ajax.BeginForm用部分 View 替换整个页面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32809801/

10-11 09:10
查看更多