当您从控制器操作返回时,MVC3 会做一些特殊的事情。当您return PartialView();
从控制器返回部分视图结果 ( ) 时,您可以引用“完整视图”,剃刀引擎将忽略该视图的布局文件并仅返回内容部分。在您的情况下,您可以检查请求是否是 AJAX 请求。基于此,返回所请求 URL 的部分视图的完整视图。您可以在 MVC3 的默认“Internet 站点”模板上尝试/尝试,仅更改两个文件。
首先,您的主页/索引视图:
@{
ViewBag.Title = "Home Page";
}
<h2>@ViewBag.Message</h2>
<p>
@Html.ActionLink("This is AJAXy", "About", "Home", null, new{@class="ajax"})
</p>
<div id="AjaxContent"></div>
<script type="text/javascript">
$(document).ready(function () {
$(".ajax").click(function (e) {
e.preventDefault();
alert("clicked");
$.ajax({
url: this.href,
dataType: 'html',
success: function (data) {
$('#AjaxContent').html(data);
alert('Load was performed.');
}
});
});
});
</script>
我正在 AJAXing 到 Home/About 操作的链接。在默认模板中,您仍然在顶部角落的默认模板导航部分中有完整的请求链接用于测试。
接下来,您的家庭控制器
使用 System.Web.Mvc;
namespace MvcApplication6.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
public ActionResult About()
{
if(Request.IsAjaxRequest())
{
return this.PartialView();
}
return View();
}
}
}
现在,从默认项目模板中只更改了这两件事,单击主导航中的 About 链接会完整请求并显示 About 页面,包括页面标题、所有头部信息等。但是,单击Home/Index 视图中的 ajax 链接将为该信息执行 AJAX 请求。您将看到 AjaxReponse div 仅填充了 About 视图的 HTML,不会遇到其他任何内容(布局等)。
实施这样的事情不仅可以帮助您的 SEO,而且不使用 JavaScript 的人仍然可以使用您的网站,功能齐全。
编辑
您不能在上面的示例中使用 .load 函数(至少在我的测试中)。原因:.load 没有设置 X-Requested-With 标头来识别它是一个 AJAX 请求。我敢肯定,有一些解决方法,但注意到那是你正在使用的,并认为如果你选择走这条路,可能会有绊倒的危险。