关于如何在 MVC 中包含"View" "View Model" ASP.NET 混淆



在阅读了许多关于如何在各种网站上设置下拉菜单的教程后,我设法拼凑了一些东西,但仍然停滞不前。

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

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模型,因为这是为数据库建模的模型。

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

这是一个用于将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))))

我希望你现在就拿到!

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

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

为了将下拉列表数据添加到视图中,我建议将数据添加到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)

最新更新