我对 ASP.NET MVC 和 Razor 比较陌生。我们一直在现有代码的基础上进行修改和开发。因此,存在大量重复(呃!)。所以我开始查看部分页面并学习部分。我遵循了这些教程,但我仍然有点困惑。
ASP.NET MVC 3:使用 Razor 进行布局和部分
在 ASP.NET MVC 中使用共享布局的各种方式
具有默认内容的可选 Razor 部分
Razor、嵌套布局和重新定义的部分
我已经能够创建其中包含部分的部分。我的问题是:
虽然某个部分总是会根据用户的选择而改变,但我可能不想删除内容部分。我可能只想根据用户选择的子菜单项添加一个新选项卡。
该计划是有一个_Layout其中包含_Header and a Section为了SideBar(子菜单)。根据用户的选择_Header,子菜单选项列表将在SideBar和Content将是一个可以包含Grid当选择“主页”按钮时,或者它可以包含Tabbed查看其他按钮。
问题
假设用户选择Billing来自_Header然后从其中选择两项Sub Menu在左侧;在“内容”部分中,应显示两个选项卡(一个对应于子菜单中选择的每个项目)。那么,如果用户选择Reports来自_Header, the SideBar应该更改为显示适当的Sub Menu项目用于Reports但我不想要这两个选项卡Billing被吹走。相反,我想为用户从列表中选择的每个项目添加额外的选项卡Reports子菜单。
下面是演示中的代码,它展示了我如何将部分页面代码放入部分中。显然,我仍然对应该采取什么方法来完成我需要的布局感到困惑。
_布局.cshtml
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/Scripts/jquery-1.10.2.min.js")
</head>
<body>
<div id="header">
<h1>My Site Header</h1>
</div>
@if (IsSectionDefined("SideBar"))
{
<div id="sidebar">
@RenderSection("SideBar")
</div>
}
<div id="content">
@RenderBody()
</div>
<div id="footer">
<p>Site Footer - © Santa Clause</p>
</div>
</body>
</html>
索引.cshtml
@{
ViewBag.Title = "Home Page";
}
@Html.Partial("HomeContentPartial")
@section SideBar {
@Html.Partial("HomeMenuPartial")
}
.CSS
#header {
background-color: #5c87b2;
color: white;
padding: 1px; }
#content {
float: left;
margin: 10px; }
#sidebar {
float: left;
margin: 10px;
padding: 10px;
border: dotted 5px red;
width: 180px; }
#footer {
text-align: center;
clear: both; }
HomeMenuPartial.cshtml
<p>This sidebar has "Home Page" specific content.</p>
<ul>
<li><a href="#">Link One</a></li>
<li><a href="#">Link Two</a></li>
<li><a href="#">Link Three</a></li>
</ul>
<p>The time is: @DateTime.Now.ToShortTimeString()</p>
HomeContentPartial.cshtml
<h2>Welcome to my Site</h2>
<p>This is our home page.</p>
<p>Not super exciting is it?</p>
<p>Yada, Yada, Yada.</p>