是否可以在_LoginPartial.chtml中使用@model



我需要从_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.cshtmlViews/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")的页面都需要做两件事中的一件。

  1. LoginPartialViewModel对象传递到@Html.Partial("_LoginPartial")中作为模型,例如@Html.Partial("_LoginPartial", loginModel)
  2. 调用_LoginPartial的视图的模型需要从LoginPartialViewModel继承

在没有模型覆盖的情况下使用@Html.Partial("_LoginPartial")会导致部分视图继承父视图的视图上下文。因此_LoginPartial想要继承调用视图使用的任何模型类型。

您可以将模型对象作为第二个参数传递给@Html.Partial调用。但如果这个分部在每一页上都使用,我建议将其移到布局中。

相关内容

  • 没有找到相关文章

最新更新