我想知道如何渲染自定义标题(基于customerid)和侧边菜单(再次,基于customerid)+主要内容。
在搜索页面上,我有一个客户列表。当我选择一个客户时,它将带我到另一个页面传递该客户的ID(/ controller / action / id)。但是,在这个新页面上,我想在侧面菜单上列出标题(姓名,电子邮件,电话等)上的客户详细信息,我想列出该客户拥有的宠物(dog1,cat2等)在主要内容上,我想显示列表中第一只宠物的详细信息(侧面菜单)。侧边菜单上的宠物列表应该是链接。例如,dog1应该是主要内容上显示的自己的详细信息的链接。 Cat2应该是显示主要内容等详细信息的链接
我只是不知道如何将ID同时传递到标题,侧边菜单和内容页面!
我已经看过mvcMusicStore,我们在左侧菜单中有一个类型列表,但这不会改变!在我的情况下,侧面菜单应根据上一页选择的客户进行更改!有意义吗?
答案 0 :(得分:2)
您有多种选择。首先,您可以使用部分视图:
in layout.cshtml [or in your usecase, search page]:
@Html.Partial(your-partial-view-name)
view: headerPartial.cshtml as an example:
@if(User.Identity.IsAuthenticated) {
<span>Welcome</span> @User.Identity.Name
} else {
<span>Login or Register</span>
}
这是基本逻辑。根据您的情况,您需要这样的东西。但是,如果你必须从例如数据库加载一些数据,我建议你使用部分操作:
// in layout or search or any page you want to render partial views:
// For example you have a controller named MyPartials:
// Put this line where you want to render header:
@Html.Action("HeaderInfo", "MyPartials")
和行动:
public class MyPartialsController : Controller {
public ActionResult HeaderInfo() {
var model = retrive header needed info from db
return Partial(model);
}
}
让我详细了解你的问题,建议你一个好的解决方案
<强>更新强>
假设:
控制器:CustomerController
行动:SeletedCustomer
解决方案:
<强> 1。机型:强>
public class HeaderInfoModel { } // contains header data: name, email, phone, etc
public class SideInfoModel { } // dog1, cat2, etc
public class MainContentModel { } // holding main content data
// bringing all together
public class CustomerModel {
public HeaderInfoModel HeaderInfo { get; set; }
public SideInfoModel SideInfo { get; set; }
public MainContentModel MainContent { get; set; }
}
<强> 2。控制器强>
public class CustomerController : Controller {
public ActionResult SeletedCustomer(int id) {
// use id and retrieve data you want, from db or anywhere else you want
var model = new CustomerModel {
HeaderInfo = SomeMethodToFetchHeaderData(id),
SideInfo = SomeMethodToFetchSideData(id),
MainContent = SomeMethodToFetchMainContent(id)
};
return View(model);
}
}
第3。主视图:Customer/SeletedCustomer.cshtml
@model CustomerModel
<div id="header">
<!-- put this where you want to render header -->
@Html.DisplayFor(model => model.HeaderInfo)
</div>
<div id="side">
<!-- put this where you want to render side -->
@Html.DisplayFor(model => model.SideInfo)
</div>
<div id="main">
<!-- put this where you want to render main content -->
@Html.DisplayFor(model => model.MainContent)
</div>
4. 在您的情况下,使用显示模板是最简单的方法。在其中一个位置创建名为DisplayTemplates
的文件夹:~/Views/Customer/
或~/Views/Shared
。这取决于您想要使用提供的模型的位置和方式。同样,在您的情况下,我建议创建此:~/Views/Customer/DisplayTemplates/
。然后在该文件夹中添加一些视图,如下所述:
4.1。在HeaderInfoModel.cshtml
中创建~/Views/Customer/DisplayTemplates/
:
@model HeaderInfoModel
<div>
implement your model presentation, I mean, show the data how you want
</div>
4.2。在SideInfoModel.cshtml
中创建~/Views/Customer/DisplayTemplates/
:
@model SideInfoModel
<div>
implement your model presentation, I mean, show the data how you want
</div>
4.3。在MainContentModel.cshtml
中创建~/Views/Customer/DisplayTemplates/
:
@model MainContentModel
<div>
implement your model presentation, I mean, show the data how you want
</div>
就是这样。完成!根据您的情况,我建议的最佳方式是。但是,您有多种选择;它完全取决于你的项目。
答案 1 :(得分:0)
您可能需要使用某种局部视图,其条件如下所示在剃刀内
if(this is correct page && CustomerID is available) { show the view }
您可以在ViewBag中传递参数并在视图中使用它们。 如果您是ASP.NET MVC的新手,这里有一些很酷的教程http://www.asp.net/mvc。
以下是为初学者构建部分视图http://mvc4beginner.com/Tutorial/MVC-Partial-Views.html的教程。
希望这有帮助