【发布时间】:2016-04-25 17:01:07
【问题描述】:
我是 MVC 新手,正在尝试创建单页应用程序。
我在_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();
}
当用户登录到我的网站时,我想渲染我的Home\Index 并仅在第一次加载时加载我的导航菜单(部分内容)。
如果用户选择任何菜单项,我正在执行 AJAX 调用以更新 _MainLayout.cshtml 中的 MainPageContent 通过这种方式我正在尝试创建单页应用程序但问题是当用户刷新页面时浏览器网址。例如:如果用户在“MyApp.com/Home”中并刷新浏览器,由于ViewBag.IsRequestFromLoginPage 签入我的Home 页面,它会导致我的应用程序丢失其_layout(仅呈现主页内容)。
不确定这是实现此目的的正确方法。有没有其他方法可以这样做。任何帮助将不胜感激。谢谢!
【问题讨论】:
-
更改您的 if 条件以仅测试它是否为空。喜欢
if(ViewBag.IsRequestFromLoginPage != null) -
@jamiedanq 但我不确定这是不是正确的做法。如果我在 home 内再次向 Home 发出请求,它将在我的 maincontent 中复制 _layout 内容。
标签: asp.net-mvc asp.net-mvc-4 razor