Onl*_*ere 2 model partial-views asp.net-mvc-3
我正在尝试制作一个部分视图,其作用如下:
当用户未登录时,显示注册表单.
用户登录后,向我显示用户信息.
我有一个部分视图,既可以作为注册表单,也可以作为用户信息卡; 取决于用户是否已登录.
由于这个局部视图必须在网站的任何地方都可见,所以我在MVC3应用程序的_layout区域写了它:
<body>
<div id="wrapper">
<div id="top">
<p id="onlinecount">7890 Personas Jugando</p>
<p id="logoncontrol">ENTRAR | REGISTRARSE</p>
</div>
<div id="headercontainer">
<img src="../../Content/Images/topheadertemp.png" />
</div>
<div id="middle">
<div id="playerinformation">
@Html.Partial("_RegisterPartial") <!-- HERE! -->
</div>
<div id="centerad">
<img src="../../Content/Images/premio.png" />
</div>
<div id="rightad">
<img src="../../Content/Images/ganadores.png" />
</div>
<div class="clear"></div>
</div>
<div id="bottom">@RenderBody()
</div>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
基本上,如果用户没有登录,我需要在该部分中显示一个表单.但是,如果他登录(通过cookie或其他),我应该加载他的信息模型,以显示他的帐户的数据.
这就是我被困的地方.我不知道如何为此用法加载模型.由于这是在_layout中,如果我是正确的,没有控制器对它起作用,不是吗?
有什么建议?
Dav*_*ter 10
您应该在页面的单个模型中具有注册和用户信息.(所以你的问题的答案是你的页面只有一个模型.但你的模型可以由其他对象组成 - 每个局部视图一个.)
因此,正如您在链接中看到的,用户具有部分视图仅在页面模型中使用与其相关的那些对象.
我认为这应该会帮助你.希望这可以帮助!祝好运.
更新:抱歉延迟,但这里有一个例子(很多代码)可能会有所帮助:
模型:我创建了一个抽象的视图模型,其中始终包含reg和用户数据.每个页面的模型都可以继承这个摘要.
public class Registration
{
public string UserName { get; set; }
public string Password { get; set; }
}
public class UserData
{
public string DisplayName { get; set; }
public int Age { get; set; }
}
public abstract class RegModelViewModelBase
{
public string Title { get; set; }
public Registration RegInfo { get; set; }
public UserData UserInfo { get; set; }
}
public class MainPageViewModel : RegModelViewModelBase
{
}
Run Code Online (Sandbox Code Playgroud)
控制器:在这里,我只是实例化该页面/视图的具体视图模型(MainPageViewModel).我设置属性(可能来自数据库等).我将视图模型传递给视图.
public class HomeController : Controller
{
public ActionResult Index()
{
MainPageViewModel hpvm = new MainPageViewModel();
hpvm.Title = "Some Cool Page";
hpvm.RegInfo = new Registration() { Password = "blah", UserName = "dhoerster" };
hpvm.UserInfo = new UserData() { DisplayName = "David Hoerster", Age = 125 };
return View(hpvm);
}
}
Run Code Online (Sandbox Code Playgroud)
视图 - _Layout.cshtml:请注意,我的模型中的第一行为我的_layout模板设置了模型对象.我从控制器获取此视图模型,我可以在_layout(或其他模板)中引用它.我在这里做的不多,除了得到一个局部视图(_RegStuff)并从我的模型(在控制器中设置)传递给我的RegInfo:
@model MvcApplication1.Models.RegModelViewModelBase
<!DOCTYPE html>
<html>
<head>
<title>@Model.Title</title>
</head>
<body>
@Html.Partial("_RegStuff", Model.RegInfo)
@RenderBody()
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
View - _RegInfo.cshtml:Dirt简单,但我再次设置了我的模型类型,这个部分视图希望传入.
@model MvcApplication1.Models.Registration
<div>User Name = @Model.UserName</div>
Run Code Online (Sandbox Code Playgroud)
View - Index.cshtml:再次,设置模型并在索引视图中使用它.
@model MvcApplication1.Models.MainPageViewModel
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>@Model.Title</h2>
<h3>Display Name = @Model.UserInfo.DisplayName</h3>
Run Code Online (Sandbox Code Playgroud)
所以在整个过程中,我可以参考控制器中的模型集.
我希望这能解释我想要达到的目标.如果没有,我可以相应更新.
谢谢!