C#MVC显示razor中viewmodel的下拉列表

时间:2014-09-14 16:26:51

标签: c# asp.net-mvc razor html.dropdownlistfor

所以我有一个包含标签列表List<Tag> tags {get; set;}

的viewmodel
public class BlogVM
    {
        public List<Blog> Blogs { get; set; }
        public List<Tag> Tags { get; set; }
    }



private EFMTMContext db = new EFMTMContext();

        // GET: /Blog/
        public ActionResult Index()
        {
            BlogVM viewModel = new BlogVM();

            viewModel.Blogs = db.Blogs.ToList();
            viewModel.Tags = db.Tags.ToList();

            return View(viewModel);
        }

标签数据库存储在viewModel.Tags中并传递到视图中。

我遇到的问题是使用Html.DropDownList显示它们。显示的是

EFTest.EntityFramwork.Tag,EFTest.EntityFramwork.Tag,EFTest.EntityFramwork.Tag。

(Namespace.Folder.Tag)我期待填充下拉列表

足球,橄榄球,网球

@model EFManyToManyTest.ViewModels.BlogVM
@Html.DropDownList("tags", new SelectList(Model.Tags), "---", false)

从viewmodel访问每个标记的正确方法是什么?

希望有人可以提供帮助。 谢谢!

我想补充一下,我可以使用

遍历Model.Tags的内容
@foreach (var item in Model.Tags)
{
    @item.Name
}
没问题。这是有效的,它只是下拉列表中没有


现在可以使用

public class Tag
    {
        public int **TagID** { get; set; }
        public string **Name** { get; set; }
        public List<Blog> Blogs { get; set; }
    }

@Html.DropDownList("tags", new SelectList(Model.Tags, **"TagID"**, **"Name"**), "---", false)

TagID,因为那是类定义中的ID属性

1 个答案:

答案 0 :(得分:2)

您没有指定值和文本字段,请查看SelectList的{​​{3}}构造函数:

public SelectList(
    IEnumerable items,
    string dataValueField,
    string dataTextField
)

例如

@Html.DropDownList("tags", new SelectList(Model.Tags, "Id", "Name"), "---", false)