0

我正在尝试从模型值中设置在我的下拉列表中选择的值。有人可以帮助我设置模型值以被选中。

@foreach (var item in Model)
{
<p>
  @Html.DisplayFor(modelItem => item.Type)
</p>
<p>
 @Html.DropDownList("categoryvalues", (IEnumerable<SelectListItem>)ViewBag.Category, "Select")
</p>
}

在下面试过

@Html.DropDownListFor(modelItem => item.Type, new SelectList((IEnumerable<SelectListItem>)ViewBag.Category,"Value","Text",modelItem => item.Type.ToString()))

我收到错误

无法将 lambda 表达式转换为类型“对象”,因为它不是委托类型

4

3 回答 3

0

我通常在我的控制器内执行此操作:

 ViewBag.Category = new SelectList(SelectAllList(),"ID", "NAME",selectedValue);

selectedValue 是您要选择的 id。

于 2013-10-25T15:16:19.787 回答
0

您需要做的就是提供模型和SelectList对象的值:

@Html.DropDownListFor(m => m.Category, Model.CategorySelectList, "Select a category")

whereCategory是模型上的属性,是模型CategorySelectList上的SelectList对象。

我建议SelectList在您的模型中构建您的对象,这样您就不会因为任何铸造或对象构建而使您的视图混乱。

于 2013-10-25T15:11:50.810 回答
0

如果您使用的是枚举,如您的评论中所述,请尝试我的枚举助手....

http://jnye.co/Posts/4/creating-a-dropdown-list-from-an-enum-in-mvc-and-c%23

这将允许您执行以下操作:

在您的控制器中:

//If you don't have an enum value use the type
ViewBag.DropDownList = EnumHelper.SelectListFor<MyEnum>();

//If you do have an enum value use the value (the value will be marked as selected)    
ViewBag.DropDownList = EnumHelper.SelectListFor(MyEnum.MyEnumValue);

在您看来:

@Html.DropDownList("DropDownList")
@* OR *@
@Html.DropDownListFor(m => m.Property, ViewBag.DropDownList as SelectList, null)

这里是帮手:

public static class EnumHelper
{
    // Get the value of the description attribute if the   
    // enum has one, otherwise use the value.  
    public static string GetDescription<TEnum>(this TEnum value)
    {
        var fi = value.GetType().GetField(value.ToString());

        if (fi != null)
        {
            var attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);

            if (attributes.Length > 0)
            {
                return attributes[0].Description;
            }
        }

        return value.ToString();
    }

    /// <summary>
    /// Build a select list for an enum
    /// </summary>
    public static SelectList SelectListFor<T>() where T : struct
    {
        Type t = typeof(T);
        return !t.IsEnum ? null
                         : new SelectList(BuildSelectListItems(t), "Value", "Text");
    }

    /// <summary>
    /// Build a select list for an enum with a particular value selected 
    /// </summary>
    public static SelectList SelectListFor<T>(T selected) where T : struct
    {
        Type t = typeof(T);
        return !t.IsEnum ? null
                         : new SelectList(BuildSelectListItems(t), "Text", "Value", selected.ToString());
    }

    private static IEnumerable<SelectListItem> BuildSelectListItems(Type t)
    {
        return Enum.GetValues(t)
                   .Cast<Enum>()
                   .Select(e => new SelectListItem { Value = e.ToString(), Text = e.GetDescription() });
    }
}
于 2013-10-25T16:15:53.253 回答