长期以来,Web Forms开发人员刚接触MVC ......
我正在开发一个电子商务网站。在所有页面共有的标题中,我需要显示有关已登录用户的一些信息(如果有)以及购物车的内容和总数。
页面的其他非常见部分有时也需要其中一些信息。例如,许多页面都需要登录的用户数据,购物车页面和整个结帐过程中都需要购物车数据。
为了最大限度地减少数据库调用,我希望每页检索一次此信息,并在页面的不同部分之间共享。
我知道我可以使用PageData和ViewBag
来执行此操作,但更喜欢使用强类型方法。
在Web窗体中,我会让我的母版页检索此信息,并通过公共属性将其访问其他页面。
如何在MVC中做得最好,最好使用布局页面或部分?
更新
我没有意识到视图模型会自动传递到布局页面。
执行以下操作是否是一种好方法:
这一切似乎运作得很好并且符合我的需要,但是这是正确的方法吗?
答案 0 :(得分:1)
创建一个包含所需信息的ViewModel,并将其传递给您的视图和部分视图。
示例:
public class CustomerViewModel
{
public String UserName { get; set; }
public DateTime LastLogin { get; set; }
}
不太确定您需要哪些信息,因此我只使用UserName
和LastLogin
作为示例。
要将ViewModel传递到View,您可以使用重载的Controller.View方法。
return View(customerViewModel);
在您的视图中,您可以使用和访问ViewModel属性,如下所述。
将以下内容添加到视图顶部:
@model ProjectName.Web.Models.CustomerViewModel
并访问以下值:
<h1>Welcome, @Model.UserName</h1>
@Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })
答案 1 :(得分:0)
我建议使用Partial Views
。通过局部视图将每个部分分开并在何时显示时进行管理。使用零件非常简单:
if(manage_when_it_will_shown)
{
@Html.Partial("_LogonPartial")
}
您也可以进行数据库调用并显示任何数据。
if(manage_when_it_will_occur)
{
@Html.Action("Action", "Contoller")
}