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

本文关键字:设置 选项 属性 模型 | 更新日期: 2023-09-27 17:59:45

我正在努力开发一个模型(例如用户),它可以从多个选项(列表)中选择一种颜色

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

//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 ???
}

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

您已接近目标。如果您只想提供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);
    }
}

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

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

我稍微改变了你的颜色类别,以防(有一天)你想走数据库路线,而不是有一套固定的颜色。用单数形式而不是复数形式来命名你的班级,例如Colour而不是Colours。

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

试试代码,看看它是如何为你工作的。