2010-05-14 167 views
3

我有一個Html.ListBox的小問題。Html.ListBox()和MultiselectList

我正在開發ASP.NET MVC 1.0中的個人博客,並創建了一個adminpanel,我可以在其中添加和編輯帖子! 在這兩個操作中,我可以添加標籤。

我想用一個Html.ListBox()助手列出所有標籤,所以我可以選擇多個標籤添加到帖子中!問題不在於添加模式,而是在編輯模式下,我必須預先選擇帖子的標籤。

我讀過我必須使用MultiSelectList等構造函數pass,tags'list和tag's list(預選值)。

但我不知道如何使用這個類。

我後,一些代碼:

這是我的模型方法獲得選擇列表的所有列表標籤

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

所以在編輯(get和post),添加(Get和郵政)我用ViewData在Html.ListBox()中傳遞此列表。

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

在我看來

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

所以用這個代碼,它在添加模式下確定。

但在編輯模式下,我需要預先選擇這些值。

所以,現在,我必須創建一個方法來獲取所有tagsbypostid。

然後在ViewData必須通過什麼?

有什麼建議嗎?

回答

0

將所選標籤的SelectListItemSelected屬性設置爲true

+0

是的,但是通過這種方式,它選擇了所有標籤,我需要預先選擇所有標籤。例如,如果標籤是c#,mvc在我的列表框中我想只看到這個標籤預選,然後其他所有標籤沒有選擇。對不起,感嘆號。 – Ivan90 2010-05-14 21:47:57

+0

您需要使用循環設置該帖子標籤的「Selected」屬性。 – SLaks 2010-05-14 21:49:16

+0

所以,我可以使用選擇新的SelectListItem一個循環迭代由PostID的標籤列表,並foreach項屬性爲true? – Ivan90 2010-05-14 21:53:15

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項目。