2012-06-18 25 views
0

在ASP.NET MVC(剃刀)的項目,我使用的是ListBox在一個編輯查看多選選項,MultiSelectList並不突出先前選定的項目

控制器

public ActionResult Edit(int id) 
    { 
     Post post = db.Posts.Find(id); 
     string selectedValues = post.Tags; //This contains Selected values list (Eg: "AA,BB") 
     ViewBag.Tagslist = GetTags(selectedValues.Split(',')); 
     return View(post); 
    } 

    private MultiSelectList GetTags(string[] selectedValues) 
    { 
     var tagsQuery = from d in db.Tags 
         orderby d.Name 
         select d; 
     return new MultiSelectList(tagsQuery, "Name", "Name", selectedValues); 

    } 

HTML

<div class="editor-field"> 
     @Html.ListBox("Tags", ViewBag.Tagslist as MultiSelectList) 
    </div> 

這在以加載項(標籤列表),但不會突出顯示Selected Values列表中的項目。

如何解決這個問題?

在此先感謝。

回答

2

我懷疑你的Post類(你的視圖是強類型的)有一個名爲Tags的屬性。您還使用Tags作爲ListBox助手的第一個參數。這意味着助手將首先查看該屬性,並忽略您傳遞給MultiSelectList的選定值。因此,要設置所選值正確的方法是:

public ActionResult Edit(int id) 
{ 
    Post post = db.Posts.Find(id); 
    ViewBag.Tagslist = GetTags(); 
    return View(post); 
} 

private MultiSelectList GetTags() 
{ 
    var tagsQuery = from d in db.Tags 
        orderby d.Name 
        select d; 
    return new MultiSelectList(tagsQuery, "Name", "Name"); 

} 

,並在視圖:

<div class="editor-field"> 
    @Html.ListBoxFor(x => x.Tags, ViewBag.Tagslist as MultiSelectList) 
</div> 

而且這裏有一個完整的例子應該說明:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var post = new Post 
     { 
      Tags = new[] { "AA", "BB" } 
     }; 
     var allTags = new[] 
     { 
      new { Name = "AA" }, new { Name = "BB" }, new { Name = "CC" }, 
     }; 
     ViewBag.Tagslist = new MultiSelectList(allTags, "Name", "Name"); 
     return View(post); 
    } 
} 

另外,我會建議你使用視圖模型,而不是將你的域實體傳遞給視圖。因此,在您的PostViewModel中,您將獲得MultiSelectList類型的AllTags。這樣你將能夠擺脫弱類型ViewBag

+0

對不起......我想這一點,但都無濟於事:( – Nalaka526

+0

一件事,在你完整的例子'Tags'是一個數組,但對我來說它是一個字符串值。 – Nalaka526

+1

哦,那是你的問題,並解釋了爲什麼你不會得到任何選定的值ListBox助手期望第一個參數是一個屬性類型集合如果你沒有這樣的屬性你有兩種可能性1.使用視圖模型,如我所建議2.使用一些虛擬名稱屬性不存在於Post模型中,然後選擇值應該工作(或者不是 - >我沒有測試過,所以無法確認100% - >我會反正使用視圖模型)。 –