我正在尝试制作一个局部 View ,其作用如下:
我有一个局部 View ,它既可以作为注册表单,也可以作为用户信息卡;取决于用户是否登录。
由于这个局部 View 必须在网站的任何地方都可见,我将它写在 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>
基本上,如果用户未登录,我需要在该部分显示一个表单。但是,如果他登录(通过 cookie 或其他方式),我应该加载他的信息模型以显示他帐户的数据。
这就是我被困的地方。我不知道如何为这种用法加载模型。由于这是在 _layout 中,如果我是对的,没有 Controller 对其进行操作,不是吗?
有什么建议?
最佳答案
你应该看看以前的question ,这与您的相似。
您应该在一个模型中为您的页面提供注册和用户信息。 (所以你的问题的答案是你的页面只有一个模型。但你的模型可以由其他对象组成——每个局部 View 一个。)
因此,正如您在链接中看到的那样,用户的部分 View 仅使用与其相关的页面模型中的那些对象。
我想这应该能帮到你。希望这可以帮助!祝你好运。
更新 :很抱歉延迟,但这里有一个示例(大量代码)可能会有所帮助:
型号 :
我创建了一个抽象 View 模型,其中始终包含 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
{
}
Controller :
在这里,我只是为这个页面/ View (MainPageViewModel)实例化了具体的 View 模型。我设置了属性(可能来自数据库等)。我将 View 模型传递给 View 。
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);
}
}
查看 -- _Layout.cshtml:
请注意,我模型中的第一行为我的 _layout 模板设置了模型对象。我从 Controller 获取这个 View 模型,我可以在 _layout(或其他模板)中引用它。除了获取部分 View (_RegStuff)并将我的 RegInfo 从我的模型(在 Controller 中设置)传递给它之外,我在这里没有做太多事情:
@model MvcApplication1.Models.RegModelViewModelBase
<!DOCTYPE html>
<html>
<head>
<title>@Model.Title</title>
</head>
<body>
@Html.Partial("_RegStuff", Model.RegInfo)
@RenderBody()
</body>
</html>
查看 -- _RegInfo.cshtml:
很简单,但我再次设置了我的模型类型,该部分 View 希望传入。
@model MvcApplication1.Models.Registration
<div>User Name = @Model.UserName</div>
查看 -- 索引.cshtml:
再次设置模型并在我的索引 View 中使用它。
@model MvcApplication1.Models.MainPageViewModel
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>@Model.Title</h2>
<h3>Display Name = @Model.UserInfo.DisplayName</h3>
因此,在整个过程中,我可以引用 Controller 中设置的模型。
我希望这能解释我想要达到的目的。如果没有,我可以相应地更新它。
谢谢!
关于asp.net-mvc-3 - 我可以有使用两个模型的局部 View 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6988365/