当您从控制器操作返回时,MVC3会执行一些特殊的操作。当您从控制器返回部分视图结果(return PartialView();
)时,您可以引用“全视图”,剃须刀引擎将忽略该视图的布局文件并仅返回内容部分。在你的情况下,你可以检查请求是否是AJAX请求。基于此,请返回所请求URL的部分视图的完整视图。您可以在MVC3的默认“Internet站点”模板上尝试使用/ expirament,只更改两个文件。
首先,您的主页/索引视图:
@{
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链接到首页/动作。在默认模板中,您仍然在顶端的默认模板导航部分中有完整的请求链接进行测试。
接下来,您的主控制器
using 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();
}
}
}
现在,只有这两样东西从默认的项目模板改变,点击关于在主导航链接不完整的页面标题关于页面的完整请求和展示,所有的你的头信息等等。但是,单击Home/Index视图中的ajax链接将对该信息执行AJAX请求。你会看到AjaxReponse div只填充了关于视图的HTML,其他的东西(布局等)都不会出现。
不仅会执行这样的事情帮助您的搜索引擎优化,但也不使用JavaScript的人仍然可以使用您的网站,充分发挥功能。
编辑
你不能用上面的例子中使用.load功能(至少在我的测试)。原因:.load不会将X-Requested-With标头设置为标识它是AJAX请求。我敢肯定,有一些解决方法,但是注意到这是你正在使用的,并且认为如果你选择这条路线,它可能会成为一个绊倒危险。
看看...https://developers.google.com/webmasters/ajax-crawling/docs/learn-more – Trent 2012-04-12 02:41:41
您的动作中是否使用[ChildActionOnly]属性? – 2012-04-12 06:36:23
尼斯链接,谢谢。 – 2012-04-12 12:29:33