我想使用2个型号。第一个位于Index.cshtml
页面,第二个位于_Layout.cshtml
页面
在包含动作public ActionResult Index(){...}
的控制器中,我声明了一些值并将其返回给View()。像这样:
public ActionResult Index()
{
HomePageViewModel model = new HomePageViewModel();
// do something...
return View(model);
}
在MyProjectName.Models
中,我编写了一些类来检查登录帐户并将其放在页面_Layout.cshtml
上。像这样:
在页面_Layout.cshtml
上:
@using MyProjectName.Models
@model MyProjectName.Models.LoginModel
@if (Model.LoginAccount != null)
{
foreach(Account acc in Model.LoginAccount)
{
@Html.ActionLink(@acc.Email, "SomeAction", "SomeController", null, new { id = "loginEmail" })
@Html.ActionLink("Logout", "SomeAction", "SomeController", null, new { id = "logout" })
}
}
第_Layout.cshtml
页上的代码无效。它说:我已经返回了一个模型(HomePageViewModel model
),但是我要渲染的一些值是从MyProjectName.Models.LoginModel
引用的
主要要求是:第一个模型用于显示页面Index.cshtml
上的内容,第二个模型用于检查用户登录(页面_Layout.cshtml
)。
答案 0 :(得分:1)
在您的布局中,使用Html.Action()
或Html.RenderAction()
来调用ChildActionOnly
方法,该方法会返回LoginModel
的部分视图
[ChildActionOnly]
public ActionResult Login()
{
LoginModel model = // initialize the model you want to display in the Layout
return PartialView(model);
}
并创建一个显示链接的局部视图,然后在Layout
中@ { Html.RenderAction("Login", "yourControllerName") }
答案 1 :(得分:0)
更好的方法是使用部分视图和ViewBag。
在你的控制器中你会做类似的事情:public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Accounts = new AccountsViewModel();
ViewBag.HomePage = new HomePageViewModel();
return View();
}
}
从这里开始,您可以将模型从ViewBag传递到局部视图
@{
AccountViewModel Accounts = (AccountViewModel)ViewBag.Accounts;
}
@Html.Partial("_accountPartial", Accounts)