2015-09-27 60 views
4

我在我简单的ASP.NET MVC应用程序中使用Ajax.BeginForm()时遇到问题。我搜索了解决方案,但没有发现我似乎有所帮助。Ajax.BeginForm用局部视图替换整个页面

我已经使用默认的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"); 
    } 

一个新视图Home\Test.cshtml

Hello world 

而且,重要的是,我已将所需的JavaScript文件的引用添加到_Layout.cshtml(将它们移动到页面的顶部不起作用)。

... 
    @Scripts.Render("~/bundles/jquery") 
    @Scripts.Render("~/bundles/jqueryval") 
    @Scripts.Render("~/bundles/bootstrap") 
    @RenderSection("scripts", required: false) 
</body> 
</html> 

我已经验证了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" /> 

我希望,当我按提交,div将填入'Hello world'。相反,整个页面被替换为'Hello world',浏览器被重定向到/Home/Test。开发人员工具中没有报告错误。

难题的缺失是什么?我知道之前在StackOverflow上已经提出了类似的问题,但通常的答案是包含这些JavaScript文件,这是我所做的。以上是我对模板项目所做的所有更改,因此看不到我可能会分裂的内容。

回答

7

我与它挣扎了几个小时,并设法找到张贴在计算器上后的溶液5分钟。典型。

我不得不安装一个NuGet软件包Microsoft.jQuery.Unobrusive.Ajax,这个软件包默认没有安装,并且在页面上添加一个对jquery.unobtrusive-ajax.js的引用。我认为它已被合并到jquery.validate.unobtrusive.js或其他东西,但没有。

+0

不!为什么这也是我的问题:(4小时。非常感谢您用您的答案更新您的OP! – Eric