如何在模型属性上设置多个选项
本文关键字:设置 选项 属性 模型 | 更新日期: 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 --"
)
试试代码,看看它是如何为你工作的。