我正在处理一个项目,为了不让每次页面更改都重新加载布局视图,我决定将视图更改为部分视图。为了在用户单击导航菜单中的菜单项之一时加载视图,我现在使用 jquery ajax,如下所示:
$("ul.metismenu a:not(.subMenuParent)").unbind().click(function (e) {
e.preventDefault();
var url = $(this).attr("href");
window.history.pushState("", "", url);
$.ajax({
url: url,
dataType: 'html',
success: function (data) {
$('#page-content').html(data);
}
});
});
元素页面内容驻留在布局视图中。它工作正常,但是我现在遇到的问题是,当我尝试直接访问视图时,我直接在浏览器中访问/Dashboard,我将只获得部分视图,而没有布局页面。有人有一些想法,请问我该如何解决这个问题?提前感谢您的任何建议。
您可以使用变量从不同的控制器操作设置不同的布局。即使是ViewBag也足够了。对于操作仪表板,您可以将 ViewBag.Layout (例如)设置为 Layout html,对于部分视图,您可以将 ViewBag.Layout 设置为空。在 html 页面中使用此变量。因此,将根据我们调用的操作选择正确的布局。
您的URL调用MVC Action
,返回ActionResult
:PartialView()
<</p>
我能够通过首先检查收到的请求是否是 ajax 请求来解决这个问题。然后根据请求的类型,我设置布局视图。这是一个操作的示例代码:-
public ActionResult Index()
{
if (!Request.IsAjaxRequest())
{
ViewBag.Layout = "~/Views/Shared/_Layout.cshtml";
}
return PartialView();
}
在部分视图中,我设置了以下内容:-
@{
Layout = ViewBag.Layout;
}
希望这对可能遇到相同问题的人有所帮助。