Enum to View 下拉框 MVC3
Enum to View 下拉框 MVC3
可能是重复问题:
我知道有几篇文章涉及MVC3中的下拉选择。但我还没有找到解决我特定问题的文章。
我试图将枚举的所有选项放入视图中的下拉列表中。
这是我的枚举/类:
namespace ColoringBook public enum Colors { Red = 0, Blue = 1, Green = 2, Yellow = 3 } public class Drawing { private Colors myColor; public Colors MyColor { get { return this.myColor; } set { this.myColor= value; } } public Drawing(Colors color) { this.myColor = color; } }
我的视图如下:
@model ColoringBook.Drawing
@{
Title = "Create";
}
Create
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
}
我的控制器将具有给出和接收数据的操作结果:
public class ColorController: Controller { public ActionResult Create() { return View(); } [HttpPost] public ActionResult Create(Colors dropdownColor) { //做一些工作并重定向到另一个视图 return View(dropdownColor); }
我不担心Post(因此在从视图接收数据的代码中缺乏努力),只关心Get。此外,正确的代码是在视图中使用下拉列表。
我已被建议不要使用ViewBag。除此之外,我对任何好的建议都持开放态度。
这个问题的出现的原因是在编辑操作中,枚举的当前值没有在下拉列表中被选中。
问题的解决方法是在编辑操作中手动设置下拉列表的选中值。
解决方法如下:
1. 在编辑操作的控制器方法中,获取当前实体的枚举属性的值。
2. 将获取到的枚举属性的值转换为整数类型,并将其转换为字符串。
3. 在下拉列表的选项集合中,找到与获取到的枚举属性的值相匹配的选项,并将其设置为选中状态。
以下是修改后的代码示例:
.DropDownListFor(model => model.Color, Enum.GetValues(typeof(ColoringBook.Colors)).Cast().Select(v => new SelectListItem { Text = v.ToString().Replace("_", " "), Value = ((int)v).ToString(), Selected = (model.Color == v) // 设置选中状态 }), "[Select]")
通过以上修改后的代码,可以在编辑操作中正确地选择当前枚举值。