asp.net-mvc-3 - 我可以有使用两个模型的局部 View 吗?

标签 asp.net-mvc-3 model partial-views

我正在尝试制作一个局部 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/

    相关文章:

    asp.net-mvc-3 - 使用 Html 助手的 Html 内部标签

    css - 当没有更多空间时将 Div 换行

    ruby-on-rails - 在 Rails 中重用 js.rjs 文件?

    javascript - AJAX 在 ASP.NET MVC 中加载局部 View - 脚本运行不止一次

    c# - MVC 4 - Html.Partial() 显示 DIV 内的 System.Namespace 文本(出现在页面上的 html 中)

    asp.net-mvc-3 - 显示数据库中的文本时保持空格

    jquery - 如何在 ASP.NET MVC3 中简单地将序列化表单作为 AJAX 表单中的数据输出

    asp.net-mvc - ASP.NET MVC 2 : ViewData. Model.ExecuteResult 不存在

    ruby-on-rails - 如何在Rails模型中获取当前用户

    c++ - 如何在 Qt 中获取 QSortFilterProxyModel 的源模型?