2

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

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

我只是不知道如何一次将 id 传递给标题、侧菜单和内容页面!

我看过 mvcMusicStore,我们在左侧菜单上有一个流派列表,但这并没有改变!在我的例子中,侧边菜单应该根据上一页选择的客户而改变!说得通?

4

2 回答 2

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>

这就对了。完毕!根据您的情况,我可以建议的最好方法是。但是,您有多种选择;这完全取决于您的项目。

于 2013-05-31T10:18:08.690 回答
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

希望这可以帮助

于 2013-05-31T09:59:04.393 回答