MVC 3上的动态标题和侧面菜单

时间:2013-05-31 05:22:14

标签: asp.net-mvc razor

我想知道如何渲染自定义标题(基于customerid)和侧边菜单(再次,基于customerid)+主要内容。

在搜索页面上,我有一个客户列表。当我选择一个客户时,它将带我到另一个页面传递该客户的ID(/ controller / action / id)。但是,在这个新页面上,我想在侧面菜单上列出标题(姓名,电子邮件,电话等)上的客户详细信息,我想列出该客户拥有的宠物(dog1,cat2等)在主要内容上,我想显示列表中第一只宠物的详细信息(侧面菜单)。侧边菜单上的宠物列表应该是链接。例如,dog1应该是主要内容上显示的自己的详细信息的链接。 Cat2应该是显示主要内容等详细信息的链接

我只是不知道如何将ID同时传递到标题,侧边菜单和内容页面!

我已经看过mvcMusicStore,我们在左侧菜单中有一个类型列表,但这不会改变!在我的情况下,侧面菜单应根据上一页选择的客户进行更改!有意义吗?

2 个答案:

答案 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的教程。

希望这有帮助