Asp.net mvc Html.ListBox()和MultiselectList
我对Html.ListBox有点小问题 我正在用ASP.NET MVC 1.0开发一个个人博客,我创建了一个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,因此在它的构造函数过程中,标签列表和标签列表(预选值) 但是我不知道如
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) %>