2011-06-10 63 views
0

我想知道爲什麼我的Html.ListBoxFor()沒有突出顯示視圖加載時當前選定的項目。爲什麼Html.ListBoxFor()不會突出顯示當前選定的項目?

我有一個數據庫模型:

public class Issue 
    { 
     [Key] 
     public int  IssueId  { get; set; } 
     public int  Number  { get; set; } 
     public string Title  { get; set; } 
     public DateTime Date  { get; set; } 

     public virtual ICollection<Creator> Creators { get; set; } 
    } 

    public class Creator 
    { 
     [Key] 
     public int  CreatorId { get; set; } 
     public string FirstName { get; set; } 
     public string MiddleName { get; set; } 
     public string LastName { get; set; } 

     public virtual ICollection<Issue> Issues { get; set; } 
    } 

    public class Icbd : DbContext 
    { 
     public DbSet<Issue> Issues { get; set; } 
     public DbSet<Creator> Creators { get; set; } 
    } 

然後我有一個編輯模式:

public class IssueEditModel 
{ 
    public Issue Issue { get; set; } 
    public IEnumerable<Creator> Creators { get; set; } 
    public IEnumerable<Creator> SelectedCreators { get {return Issue.Creators;} } 
} 

然後,在我的控制器我填充IssueEditModel

public ActionResult EditIssue(int id = 0) 
    { 
     IssueEditModel issueEdit = new IssueEditModel{ 
      Creators = db.Creators.ToList(), 
      Issue = new Issue{ Creators = new List<Creator>()}, 
     }; 
     if (id > 0) 
     { 
      issueEdit.Issue = db.Issues.Include("Creators").Where(x => x.IssueId == id).Single(); 
     } 

     return View(issueEdit); 
    } 

這種填充所有對象正確(據我所知,無論如何)。在我的視圖中,我正在寫一個列表框像這樣:

<%: Html.ListBoxFor(
       x => x.SelectedCreators, 
       new SelectList(
        Model.Creators, 
        "CreatorId", 
        "LastName" 
     ) 
      )%> 

這將列出所有選項正確,但我無法獲取當前選擇的項目來突出顯示。我幾乎想寫我自己的Html Helper,因爲這是一個簡單的操作,我不明白爲什麼這是如此困難。

爲什麼不通過Html Helper突出顯示當前項目?

回答

3

您需要作爲第一個參數ListBoxFor助手將其映射到要預選的創建者ID標類型的列表:

public class IssueEditModel 
{ 
    public IEnumerable<Creator> Creators { get; set; } 
    public IEnumerable<int> SelectedCreatorIds { get; set; } 
} 

然後:

IssueEditModel issueEdit = new IssueEditModel 
{ 
    Creators = db.Creators, 
    SelectedCreatorIds = db.Creators.Select(x => x.CreatorId) 
}; 

,並在查看:

<%: Html.ListBoxFor(
    x => x.SelectedCreatorIds, 
    new SelectList(
     Model.Creators, 
     "CreatorId", 
     "LastName" 
    ) 
) %> 
+0

啞巴問題提示:「標量」是什麼意思? – quakkels 2011-06-10 16:35:34

+0

不知道:-) http://en.wikipedia.org/wiki/Scalar_(computing) – quakkels 2011-06-10 16:37:21

+0

@quakkels,我已經更新了我的答案,以簡化一些事情。但是,這個想法是,ListBoxFor的第一個參數應該是一個簡單類型(int,string,...)的集合,它們表示您希望預先選擇的id。 – 2011-06-10 16:38:49

1

Darin提交的例子幾乎是正確的,b有一個小小的錯誤。目前,他的榜樣將預選所有創作者!但是,期望的結果是僅預先選擇與問題的特定實例關聯的創建者。

所以這個:

IssueEditModel issueEdit = new IssueEditModel 
{ 
    Creators = db.Creators, 
    SelectedCreatorIds = db.Creators.Select(x => x.CreatorId) 
}; 

應該是這樣的:

IssueEditModel issueEdit = new IssueEditModel 
{ 
    Creators = db.Creators, 
    SelectedCreatorIds = CurrentIssue.Creators.Select(x => x.CreatorId) 
}; 

CurrentIssue問題類的一個實例(大概是以前從資料儲存庫)。

相關問題