如何在模型属性上设置多个选项

时间:2015-06-24 20:10:35

标签: c# asp.net-mvc collections model

我试图详细说明一个模型(例如用户),它可以从多个选项中选择颜色(列表)

我如何在模型中编写它并在视图中公开它? 我只需要为颜色编写一个单独的模型,或者这种方法是否正确:

//user.cs
public class User
{
    public string Name { get; set; }

    public Colors Colors { get; set; }
}

//colors.cs
public class Colors
{
    public User User { get; set; }
    public enum Colors ???
}

2 个答案:

答案 0 :(得分:2)

你快到了。如果您只想提供Color枚举,则不需要Color类。考虑到这一点,试试这个:

public enum Color
{
    Red,
    Green,
    Blue
}

public class User
{
    public String Name { get; set; }

    public Color Color { get; set; }
}

public class UserColorAddEditViewModel
{
    public String Name { get; set; }

    public Color Color { get; set; }

    public IList<SelectListItem> ColorSelectList { get; set; }
}

然后在视图中,您可以使用UserColorAddEditViewModel模型并使用以下HtmlHelper

@Html.DropDownListFor(model => model.Color, Model.ColorSelectList)

或提到Icemanind,您只需使用:

@Html.EnumDropDownListFor(model => model.Color)并废弃ColorSelectList变量(这意味着您也可以忽略下面的部分)。

如果您决定使用DropDownListFor助手,则需要在定义的Controller类中启动此变量,如下所示。

public class MyController : Controller
{
     public ActionResult Index()
     {
          UserColorAddEditViewModel Model = new UserColorAddEditViewModel();

          Model.ColourSelectList = Enum.
                GetValues(typeof(Color)).
                Cast<Color>().
                Select(c => new SelectListItem { Text = c.ToString(), Value = ((int)c).ToString()})
                .ToList();

        return View(Model);
    }
}

答案 1 :(得分:1)

您的基本用户类将如下所示。我把你的名字属性分解为名字和姓氏。

public class User
{
     public string FirstName { get; set; }

     public string LastName { get; set; }
}

我改变了你的颜色等级以防万一(一天)你希望能够使用数据库路径而不是一组固定的颜色。以单数形式命名您的类,而不是复数,例如Color而不是Colors。

public class Colour
{
     public int Id { get; set; }

     public string Name { get; set; }
}

用户视图模型将传递给视图。此视图模型将包含用户信息以及将在下拉列表中使用的颜色列表。

public class UserViewModel
{
     public string Name { get; set; }

     public int ColourId { get; set; }

     public List<Colour> Colours { get; set; }
}

在控制器的操作方法中,您可以在上面创建一个视图模型的实例,并使用用户数据和所有颜色的列表填充它。

public ActionResult Edit(int userId)
{
     // Get your user's information
     User user = userRepository.GetById(userId);

     UserViewModel model = new UserViewModel();
     model.Name = user.FirstName + " " + user.LastName;
     // This can be separated into a repository class of its own if you need to use colours in another action method
     model.Colours = new List<Colour>
     {
         new Colour { Id = 1, Name = "Blue" },
         new Colour { Id = 2, Name = "Green" },
         new Colour { Id = 3, Name = "Red" },
         new Colour { Id = 4, Name = "Yellow" }
     };

     return View(model);
}

然后在你看来,你会有类似的东西:

<h1>@Model.Name</h1>
<p>Please select a colour:</p>
@Html.DropDownListFor(
     x => x.ColourId,
     new SelectList(Model.Colours, "Id", "Name", Model.ColourId),
     "-- Select --"
)

使用代码来查看它是如何为您工作的。