mvc母版页 ajax只加载 一次,c# - MVC 3:当通过ajax加载时,如何在没有布局页面的情况下渲染视图?...

我正在学习渐进式增强功能,我对AJAXifying视图有疑问。 在我的MVC 3项目中,我有一个布局页面,一个viewstart页面和两个普通视图。

viewstart页面位于Views文件夹的根目录中,因此适用于所有视图。 它指定所有视图应使用_Layout.cshtml作为其布局页面。 布局页面包含两个导航链接,每个视图一个。 链接使用Request.IsAjaxRequest()将自己呈现给页面。

现在我添加了jQuery并希望劫持这些链接并使用Ajax动态加载页面上的内容。

$(function () {

$('#theLink').click(function () {

$.ajax({

url: $(this).attr('href'),

type: "GET",

success: function (response) {

$('#mainContent').html(response);

}

});

return false;

});

});

我可以通过两种方式来做到这一点,但我并不特别喜欢这两种方式:

1)我可以获取整个View的内容并将它们放在局部视图中,然后让主视图在渲染时调用局部视图。 这样,在控制器中使用Request.IsAjaxRequest(),我可以返回View()或根据请求是否是Ajax请求返回PartialView()。 我无法将常规视图返回到Ajax请求,因为它将使用布局页面,我将获得注入的布局页面的第二个副本。 但是,我不喜欢这个,因为它迫使我创建空视图,其中只有一个@{Html.RenderPartial();}用于标准GET请求。

public ActionResult Index()

{

if (Request.IsAjaxRequest())

return PartialView("partialView");

else

return View();

}

然后在Index.cshtml中执行以下操作:

@{Html.RenderPartial("partialView");}

2)我可以从_viewstart中删除布局指定,并在请求不是Ajax时手动指定它:

public ActionResult Index()

{

if (Request.IsAjaxRequest())

return View(); // Return view with no master.

else

return View("Index", "_Layout"); // Return view with master.

}

有人有更好的建议吗? 有没有办法在没有布局页面的情况下返回视图? 如果它是一个ajax请求,那么明确地说“不包括你的布局”会比在明确包含布局(如果它不是ajax)要容易得多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值