我从一个枚举创建了一个SelectList。枚举有一个描述,并且将int值设置为我要存储在数据库中的值。

问题是,未使用我在构造上设置的默认值(空白)。

这是我的枚举:

public enum Stage
{
    [Description("")]
    BLANK = -99,
    [Description("No Data")]
    NoData = 9999,
    [Description("Nil")]
    Nil = 0,
    [Description("Action")]
    SAction = 1,
    [Description("Action Plus")]
    SActionPlus = 2,
    [Description("Full")]
    Full = 3
}


我在控制器中创建它:

private static IEnumerable<SelectListItem> GenerateSenStageList()
{
    var values = from Stage e in Enum.GetValues(typeof(Stage))
                 select new { ID = (int)e, Name = e.ToDescription() };

    return new SelectList(values, "Id", "Name", (int)Stage.BLANK);
}


我以为最终参数设置了所选项目。
我将其分配为ViewData,并按以下方式访问它:

 <%= Html.DropDownList("Stage", (IEnumerable<SelectListItem>)ViewData["StageList"])%>


但是,Nil始终是所选值。

我在这里想念什么?

谢谢!

最佳答案

艾妮

使用您的代码,我设法使它第一次起作用。这是我的修改代码(使用accountcontroller进行测试)[使用.net 3.5]:

// from account controller - put the enum, etc in there for brevity
public enum Stage
{
    [Description("")]
    BLANK = -99,
    [Description("No Data")]
    NoData = 9999,
    [Description("Nil")]
    Nil = 0,
    [Description("Action")]
    SAction = 1,
    [Description("Action Plus")]
    SActionPlus = 2,
    [Description("Full")]
    Full = 3
}

public static IEnumerable<SelectListItem> GenerateSenStageList()
{
    var values = from Stage e in Enum.GetValues(typeof(Stage))
                 select new { ID = (int)e, Name = e.ToDescription() };

    var sellist= new SelectList(values, "Id", "Name", (int)Stage.BLANK);
    return sellist;
}

public virtual ActionResult LogOn()
{
    var res = GenerateSenStageList();
    ViewData["StageList"] = res;
    return View();
}

// the ToDescription() extension method
public static class Extn
{
    public static string ToDescription(this Enum value)
    {
        FieldInfo fi = value.GetType().GetField(value.ToString());

        var attributes =
            (DescriptionAttribute[])fi.GetCustomAttributes(
            typeof(DescriptionAttribute),
            false);

        if (attributes != null &&
            attributes.Length > 0)
            return attributes[0].Description;
        else
            return value.ToString();
    }
}

// then in the LogOn view:
<%= Html.DropDownList("Stage", (IEnumerable<SelectListItem>)ViewData["StageList"])%>


所有这些都完全符合您的期望,所以我想知道您从视图中进行的调用是否有点混乱。尝试上面的示例,看看在selectlist生成的代码等中是否存在任何细微的差异。

关于c# - 为什么我的下拉菜单不默认为给定值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5026633/

10-11 02:02
查看更多