Html.ListBox()和MultiselectList

时间:2010-05-14 21:36:43

标签: asp.net-mvc html-helper

我对Html.ListBox有点问题。

我正在ASP.NET MVC 1.0中开发一个个人博客,我创建了一个adminpanel,我可以在其中添加和编辑帖子! 在这两个操作中,我还可以添加标签。

我想使用Html.ListBox()帮助器列出所有标签,因此我可以选择多个标签添加到帖子中!问题不在添加模式期间,而是在编辑模式下,我必须预先选择帖子的标签。

我读到我必须使用MultiSelectList,因此在其构造函数传递中,标记'list和tag的列表(预选值)。

但我不知道如何使用这个课程。

我发布了一些代码:

这是我的模型方法,可以在选择列表中获取所有列表标记

public IEnumerable<SelectListItem> GetTagsListBox()
    {
            return   from t in db.Tags
                     orderby t.IDTag descending
                     select new SelectListItem {
                         Text = t.TagName,
                         Value = t.IDTag.ToString(),
                     };
    }

因此,在编辑(获取和发布),添加(获取和发布)中,我使用ViewData在Html.ListBox()中传递此列表。

ViewData["Tags"] = tagdb.GetTagsListBox();

在我看来

<%=Html.ListBox("Tags",ViewData["Tags"] as SelectList) %>

所以使用此代码,在添加模式下即可。

但在编辑模式中,我需要预先选择这些值。

所以现在,我必须创建一个方法来获取所有tagbypostid。

然后在ViewData我必须通过什么?

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

我想你可以做以下事情:

public IEnumerable<SelectListItem> GetTagsListBoxWithPostTagsSelected(int postID)
{
    // Assuming you need to create this function and that Tag.IDTag is an int
    var postTags = GetAllTagsByPostID(postID);

    return from t in db.Tags           
           orderby t.IDTag descending           
           select new SelectListItem {           
               Text = t.TagName,           
               Value = t.IDTag.ToString(),
               Selected = postTags.Exists(pt => pt.IDTag == t.IDTag)
           };           
}           

这应该返回正确的列表,其中包含所选帖子的值。

您需要制作GetAllTagsByPostID(postID)并使用新方法接收PostID以确保正确选择代码。

不需要改变:

<%=Html.ListBox("Tags", ViewData["Tags"] as SelectList) %>

ViewData["Tags"]现在应包含选择ListBox项目所需的信息。

答案 1 :(得分:0)

将所选代码的Selected s的SelectListItem属性设置为true

答案 2 :(得分:0)

我发现使用ListBoxFor在多选列表中进行选择的解决方案是由该线程中的另一个用户发布的; Challenges with selecting values in ListBoxFor

希望这有帮助。