Asp.net mvc Html.ListBox()和MultiselectList

Asp.net mvc Html.ListBox()和MultiselectList,asp.net-mvc,html-helper,Asp.net Mvc,Html Helper,我对Html.ListBox有点小问题 我正在用ASP.NET MVC 1.0开发一个个人博客,我创建了一个adminpanel,在那里我可以添加和编辑一篇文章! 在这两个操作中,我还可以添加标记 我想使用Html.ListBox()helper列出所有标记,这样我就可以选择多个标记添加到帖子中!问题不是在添加模式下,而是在编辑模式下,在编辑模式下,我必须预先选择帖子的标签 我读到我必须使用一个MultiSelectList,因此在它的构造函数过程中,标签列表和标签列表(预选值) 但是我不知道如

我对Html.ListBox有点小问题

我正在用ASP.NET MVC 1.0开发一个个人博客,我创建了一个
adminpanel
,在那里我可以添加和编辑一篇文章! 在这两个操作中,我还可以添加标记

我想使用
Html.ListBox()
helper列出所有标记,这样我就可以选择多个标记添加到帖子中!问题不是在添加模式下,而是在编辑模式下,在编辑模式下,我必须预先选择帖子的标签

我读到我必须使用一个
MultiSelectList
,因此在它的构造函数过程中,标签列表和标签列表(预选值)

但是我不知道如何使用这个类

我发布了一些代码:

这是我的models方法,它可以在selectlist中获取所有列表标记

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

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

因此,有了这段代码,在添加模式下就可以了

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

现在,我当然要创建一个方法来获取所有tagsbypostid

然后在
ViewData
中,我必须传递什么


有什么建议吗?

将所选标签的
SelectListItem
s的
Selected
属性设置为
true

我认为您可以执行以下操作:

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)
           };           
}           

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

我找到的使用ListBoxFor在多选列表中进行选择的解决方案是另一个用户在此线程中发布的


希望这能有所帮助。

是的,但这样它选择了所有标签,我需要预先选择post中的所有标签。例如,如果标记是c#,则我希望在我的列表框中只看到预选的此标记,然后看到未选择的其他所有标记。很抱歉使用感叹号。您需要使用循环为该帖子的标记设置
Selected
属性。因此,我可以在select new SelectListItem中使用循环按PostID迭代标记列表,并将其属性设置为true?您应该
foreach
实际帖子中的标记,然后写入
tagItems.Single(t=>t.Value==tag.IDTag.ToString()).Selected=true
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)
           };           
}           
<%=Html.ListBox("Tags", ViewData["Tags"] as SelectList) %>