DropDownListFor的字符串列表

时间:2014-06-03 19:05:14

标签: asp.net-mvc html.dropdownlistfor

这是我的模特:

public class ContentPage
    {

        public BlogPost BlogPost { get; set; }
        public List<BlogPost> BlogPosts { get; set; }

        public List<string> Kategorier { get; set; }
    }

我想使用

中的值
public List<string> Kategorier { get; set; }

在下拉列表中,这是我到目前为止所得到的:

@Html.DropDownListFor(o => o.BlogPost.Kategori, "Here i want my list i guess?"(o => new SelectListItem { Text = o.Kategori, Value = o.Kategori }), "", null)

要清除,我想使用List Kategorier中的值来设置o.BlogPost.Kategori的值 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

您可以使用许多重载,但我认为最易读的是

@Html.DropDownListFor(model => model.BlogPost.Kategori, 
                               Model.Kategorier.Select(kat => new SelectListItem { Text = kat, Value = kat })

我喜欢这种重载的部分原因只是我喜欢强类型并且受到(aspnet)编译器的帮助。我通常会避免使用SelectList及其基于string的构造函数,因为它们很脆弱。

您可能希望将List<string>转换为视图模型中的IEnumerable<SelectListItem>,而不必在视图中执行此操作。

修改

我会做像

这样的事情
public class ContentPage
{
    public ContentPage(){} //Default constructor needed for model binding
    public ContentPage(List<string> kategorier /* and possibly more arguments */)
    {
        Kategorier = kategorier.Select(k => new SelectListItem { Text = k, Value = k });
    }

    public BlogPost BlogPost { get; set; }
    public List<BlogPost> BlogPosts { get; set; }

    public IEnumerable<SelectListItem> Kategorier { get; set; }
}

请注意,这应该可以用于创建新的博客帖子,但是如果您想要编辑现有的博客帖子,您将需要做更多的工作(当您最初渲染页面时必须选择类别等) )。