关于如何在ASP.NET MVC中将“视图模型”包含到“视图”中的困惑

时间:2013-11-25 16:11:54

标签: asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-5

通过阅读有关如何在各个网站上设置下拉菜单的许多教程,我已经设法将一些东西拼凑在一起,但仍然卡住了。

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

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" }
    };

在同一个视图中,我一直使用此代码生成一个下拉框:

@Html.DropDownList("RoomGender", new SelectList(genderItems, "Value", "Text", Model.RoomGender))

有人可以解释一下我应该如何抽象它然后将其传递给视图而不删除我已经附加的Room模型,因为那是模拟数据库数据的模型。 / p>

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

3 个答案:

答案 0 :(得分:3)

这是用于将Enum 性别绑定到您的视图。 假设学生是我绑定到视图的模型,

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))))

我希望你现在明白!

答案 1 :(得分:1)

Room模型不是您的视图模型吗?视图模型只是一个包含视图所需数据的类。公约规定,它们往往被称为视图模型,以将它们与域模型分开。在您的情况下,您可以为RoomStatusItems的{​​{1}}添加几个属性。或者,创建一个带有属性GenderItems的{​​{1}}和2个列表属性,然后将其传递给View。

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

答案 2 :(得分:0)

为了将下拉列表数据提供给视图,我建议将数据添加到ViewBag

你可以在这里看到一个例子: http://jnye.co/Posts/12/creating-cascading-dropdownlists-using-mvc-4-and-jquery

首先将值添加到ViewBag。通常我把它放在它自己的方法中,因为每次加载页面时都需要调用它(包括,当在失败的表单子项上显示时):

//You can keep your current list setup, I have simply shortened it for brevity
var genderItems = new List<string> {"Unisex", "Female", "Male"};
ViewBag.Genders = new SelectList(genderItems);

然后在你看来:

@Html.DropDownList("gender", ViewBag.Genders as SelectList)

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

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