这是我的模特:
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的值 任何帮助表示赞赏。
答案 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; }
}
请注意,这应该可以用于创建新的博客帖子,但是如果您想要编辑现有的博客帖子,您将需要做更多的工作(当您最初渲染页面时必须选择类别等) )。