Asp.net mvc 关于如何包含“的困惑”;“视图模型”;至“a”;“视图”;在ASP.NETMVC中

Asp.net mvc 关于如何包含“的困惑”;“视图模型”;至“a”;“视图”;在ASP.NETMVC中,asp.net-mvc,entity-framework,asp.net-mvc-4,entity-framework-5,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,Entity Framework 5,在阅读了许多关于如何在各种网站上设置下拉菜单的教程后,我成功地拼凑出了一些东西,但仍然被卡住了 我被告知下面的代码应该包含在视图模型中,目前它位于视图的顶部: var genderItems = new List<ListItem> { new ListItem { Text = "Unisex", Value = "0" }, new ListItem { Text = "Female", Value = "1" },

在阅读了许多关于如何在各种网站上设置下拉菜单的教程后,我成功地拼凑出了一些东西,但仍然被卡住了

我被告知下面的代码应该包含在视图模型中,目前它位于视图的顶部:

var genderItems = new List<ListItem> 
    { 
          new ListItem { Text = "Unisex", Value = "0" }, 
          new ListItem { Text = "Female", Value = "1" },
          new ListItem { Text = "Male", Value = "2" } 
    };

var statusItems = new List<ListItem> 
    { 
          new ListItem { Text = "Inactive", Value = "0" }, 
          new ListItem { Text = "Active", Value = "1" }
    };
有人能解释一下我应该如何抽象这个,然后将它传递给视图,而不移除我已经连接的
房间
模型,因为这是为数据库建模的模型


这可能很简单,我已经尝试过研究它,但我真的很难把它拼凑在一起。

这个
房间
模型不是已经是你的视图模型了吗?视图模型只是一个包含视图所需数据的类。按照惯例,它们往往被称为视图模型,以将它们与域模型分开。在您的情况下,您可以为
StatusItems
GenderItems
Room
添加两个属性。或者,创建一个带有属性
Room
RoomViewModel
和两个列表属性,并将其传递给视图


理想情况下,您可以创建一个
RoomViewModel
,并为需要在视图中显示的所有数据创建属性。这不需要匹配域对象的结构。在MVC层中,您将获取从中检索视图数据的域对象,并在视图模型创建期间映射这些属性。您可以手动执行此操作,也可以使用类似于
Automapper
的工具

这个
房间
模型不是你的视图模型吗?视图模型只是一个包含视图所需数据的类。按照惯例,它们往往被称为视图模型,以将它们与域模型分开。在您的情况下,您可以为
StatusItems
GenderItems
Room
添加两个属性。或者,创建一个带有属性
Room
RoomViewModel
和两个列表属性,并将其传递给视图


理想情况下,您可以创建一个
RoomViewModel
,并为需要在视图中显示的所有数据创建属性。这不需要匹配域对象的结构。在MVC层中,您将获取从中检索视图数据的域对象,并在视图模型创建期间映射这些属性。您可以手动执行此操作,也可以使用类似于
Automapper
的工具

这是一个用于将EnumGender绑定到您的视图的工具。 假设Student是我绑定到视图的模型

namespace MyApp.Models
{
    public class Student 
    {
            public int Id { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public Gender Gender { get; set; }
    }

    public enum Gender 
    { Male = 0, Female = 1 }
}
然后在你看来

@Html.DropDownListFor(model => model.Gender, new SelectList(Enum.GetValues(typeof(MyApp.Models.Gender))))

我希望你现在就明白了

这是一个用于将EnumGender绑定到您的视图的工具。 假设Student是我绑定到视图的模型

namespace MyApp.Models
{
    public class Student 
    {
            public int Id { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public Gender Gender { get; set; }
    }

    public enum Gender 
    { Male = 0, Female = 1 }
}
然后在你看来

@Html.DropDownListFor(model => model.Gender, new SelectList(Enum.GetValues(typeof(MyApp.Models.Gender))))

我希望你现在就明白了

为了将下拉列表数据添加到视图中,我建议将数据添加到视图中

您可以在此处看到这样一个示例:

首先将这些值添加到您的
视图包
。通常,我将其放入自己的方法中,因为每次加载页面时都需要调用它(包括在失败的表单子任务上显示时):

或者,如果要将结果绑定到视图模型上的属性:

@Html.DropDownListFor(m => m.Property, ViewBag.Genders as SelectList)

为了将下拉列表数据添加到视图中,我建议将数据添加到视图中

您可以在此处看到这样一个示例:

首先将这些值添加到您的
视图包
。通常,我将其放入自己的方法中,因为每次加载页面时都需要调用它(包括在失败的表单子任务上显示时):

或者,如果要将结果绑定到视图模型上的属性:

@Html.DropDownListFor(m => m.Property, ViewBag.Genders as SelectList)

比如说,我正在使用
Room
Bunk
类(我已经迁移到数据库中),这些是我的域模型吗?在生成控制器时,我将
Room
类设置为我的模型,我是否应该创建另一个类作为我的域模型的包装类型?更新了我的答案,提供了更详细的信息。有帮助吗?有帮助!虽然我有点困惑,一个自动生成的控制器使用EF5(创建索引,创建,详细,编辑,删除)将能够存储到数据库中,如果我有一个<代码> ROMVIEWVIEWSMODS SAT在中间?@ JAMIESHANIKWASCREET:您“映射”代码> ROOMVIEWSMODS<<代码>返回到<代码>房间< /代码>,反之亦然。您可以手动执行此操作,只需将每个属性设置为另一个模型上的相应属性,或者使用AutoMapper()之类的工具。如果有机会,我可以向您展示我的项目中的代码以及我构建的完整体系结构。我想我已经把自己弄得一团糟了:(比如说我正在使用
Room
Bunk
类(我已经迁移到数据库中了),这些是我的域模型吗?在生成控制器时,我将
Room
类设置为我的模型,我是否应该创建另一个类作为域模型的包装类型?更新了我的答案,并提供了更多详细信息。这有帮助吗?确实有帮助!尽管我有点困惑自动生成的控制器如何使用EF5(创建索引,创建,详细,编辑,删除)将能够存储到数据库中,如果我有一个<代码> ROMVIEWVIEW SAT在中间?@ JAMiShanHikWestReET:你的“地图”
RoomViewModel
返回到
RoomViewModel
,反之亦然。您可以手动执行此操作,只需将每个属性设置为另一个模型上的相应属性,或使用类似AutoMapper()我是否有机会向你们展示我在项目中的代码以及我构建的完整体系结构。我想我已经有了我自己