在ASP.NET MVC中设置单页面应用程序的布局

时间:2016-04-25 17:01:08

标签: asp.net-mvc asp.net-mvc-4 razor

我是MVC新手并尝试创建单个分页应用程序。

我在[{1}}

中的内容
_Layout.cshtml

注意:<section class="content-wrapper main-content clear-fix"> @Html.Action("Index", "MenuNavigation", "U01") @RenderBody() </section> 是我从数据库渲染动态导航菜单的地方(只会从数据库加载一次)

以下是使用@Html.Action("Index", "MenuNavigation", "U01")作为母版页

_MainLayout.cshtml
_Layout.cshtml

以下是我的@{ ViewBag.Title = ""; Layout = "_Layout.cshtml"; } <div id="MainPageContent"> @RenderBody() </div> 视图

Home\Index

这是相应的@{ ViewBag.Title = "Home Page"; if (ViewBag.IsRequestFromLoginPage !=null && ViewBag.IsRequestFromLoginPage) { Layout = "~/Views/Shared/_MainLayout.cshtml"; } else { Layout = null; } } @Html.AntiForgeryToken() <h2>Home</h2> 控制器

Home

当用户登录我的网站时,我想渲染我的public ActionResult Index() { ViewBag.IsRequestFromLoginPage = TempData[Constants.TempData.IsUserFromLogin]; TempData[Constants.TempData.IsUserFromLogin] = false; return View(); } 并仅在第一次加载时加载我的导航菜单(部分内容)。

如果用户选择了任何一个菜单项,我正在进行AJAX调用以通过这种方式更新Home\Index中的MainPageContent我试图创建单页面应用程序但是问题是当用户从浏览器URL刷新页面时。例如:如果用户在&#34; MyApp.com/Home"并刷新浏览器导致我的应用程序失去其_layout(仅呈现主页内容),因为我_MainLayout.cshtml页面中的ViewBag.IsRequestFromLoginPage检查。

不确定这是实现此目的的正确方法。有没有其他选择。任何帮助将不胜感激。谢谢!

以下是我的布局如何&​​gt; My MVC Layout

@Daniel For Daniel reference

1 个答案:

答案 0 :(得分:0)

您的代码有点多余,如果您说其主要布局为@RenderBody()并且还调用_MainLayout.cshtml,为什么_Layout.cshtml中有@RenderBody?而不是使用@Html.Action@RenderBody()使用Html.RenderAction(当调用不是索引的differente方法时)并且没有为该视图指定布局,以同样的方式,摆脱所有验证,看它是否来自登录页面,请注意,索引方法总是默认输入,所以如果你正在访问你的家庭控制器,实际上甚至不需要调用任何类型的HTML操作,你可以离开你像这样的主要布局

<section class="content-wrapper main-content clear-fix">   
<div id="MainPageContent">
@RenderBody()
</div>

</section>

和您的索引视图如下:

@Html.AntiForgeryToken()
<h2>Home</h2>

在另一个ActionResult方法中,您可以加载与Index相同的视图,如下所示:

public ActionResult update(){
return View("Index");
}

然后你用AJAX调用用该方法填充“MainContentPage”div而不是“Index”。