Enum to View 下拉框 MVC3

13 浏览
0 Comments

Enum to View 下拉框 MVC3

可能是重复问题:

如何在ASP.NET MVC中从枚举创建下拉列表?

我知道有几篇文章涉及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)

Color

@Html.LabelFor(model => model.Color)

//不确定如何填充

//@Html.DropDownList("Color",new SelectList())

}

我的控制器将具有给出和接收数据的操作结果:

public class ColorController: Controller
{
     public ActionResult Create()
     {
        return View();
     }
     [HttpPost]
     public ActionResult Create(Colors dropdownColor)
     {
        //做一些工作并重定向到另一个视图
        return View(dropdownColor); 
     }

我不担心Post(因此在从视图接收数据的代码中缺乏努力),只关心Get。此外,正确的代码是在视图中使用下拉列表。

我已被建议不要使用ViewBag。除此之外,我对任何好的建议都持开放态度。

0
0 Comments

这个问题的出现的原因是在编辑操作中,枚举的当前值没有在下拉列表中被选中。

问题的解决方法是在编辑操作中手动设置下拉列表的选中值。

解决方法如下:

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

通过以上修改后的代码,可以在编辑操作中正确地选择当前枚举值。

0