我是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
检查。
不确定这是实现此目的的正确方法。有没有其他选择。任何帮助将不胜感激。谢谢!
答案 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”。