我需要从_LoginPartial.cshtml
的数据库中获取一些数据。是否可以在_LoginPartial.cshtml
中使用@model
?或者是怎么做到的?只需@using WebApp.Services
,然后直接从服务中检索数据?还是有更优雅的方式?
我试着用@model
做这件事,但没有成功,因为_LoginPartial.cshtml
中的@model
被另一个@model
覆盖了。_LoginPartial.cshtml
被"注入"到每个页面/视图中。
Views/Shared/_LoginPartial.cshtml
@model WebApp.ViewModels.LoginPartialViewModel
@Html.ActionLink("" + User.Identity.Name + " (" + Model.Email + ")", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" })
ViewModels/ManageViewModels.cs
public class LoginPartialViewModel
{
public string Email = new UserService().ReadCurrent().Email;
}
Views/Shared/_LoginPartial.cshtml
在Views/Shared/_Layout.cshtml
中的使用方式如下:
@Html.Partial("_LoginPartial")
这可以用@model
完成吗?或者我必须在Views/Shared/_LoginPartial.cshtml
中做一些讨厌的事情,比如:
@using WebApp.Services
var userService = new UserService();
var email = userService.Read(User.Identity.GetUserId()).Email;
@Html.ActionLink("" + User.Identity.Name + " (" + email + ")", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" })
每个使用@Html.Partial("_LoginPartial")
的页面都需要做两件事中的一件。
- 将
LoginPartialViewModel
对象传递到@Html.Partial("_LoginPartial")
中作为模型,例如@Html.Partial("_LoginPartial", loginModel)
- 调用
_LoginPartial
的视图的模型需要从LoginPartialViewModel
继承
在没有模型覆盖的情况下使用@Html.Partial("_LoginPartial")
会导致部分视图继承父视图的视图上下文。因此_LoginPartial
想要继承调用视图使用的任何模型类型。
您可以将模型对象作为第二个参数传递给@Html.Partial
调用。但如果这个分部在每一页上都使用,我建议将其移到布局中。