[英]Why won't Html.ListBoxFor() highlight current selected items?
我試圖理解為什么我的Html.ListBoxFor()
在視圖加載時沒有突出顯示當前選定的項目。
我有一個數據庫 model:
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; }
}
然后我有一個編輯 model:
public class IssueEditModel
{
public Issue Issue { get; set; }
public IEnumerable<Creator> Creators { get; set; }
public IEnumerable<Creator> SelectedCreators { get {return Issue.Creators;} }
}
然后,在我的 controller 中填充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"
)
)%>
這正確列出了所有選項,但我無法突出顯示當前的 select 項目。 我幾乎想寫我自己的 Html Helper 因為這是一個如此簡單的操作,我不明白為什么這么難。
為什么 Html Helper 不會突出顯示當前項目?
您需要一個標量類型列表作為ListBoxFor
助手的第一個參數,它將 map 到您想要預選的創建者 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"
)
) %>
Darin 提交的示例幾乎是正確的,但有一點錯誤。 目前,他的示例將預先選擇所有創建者,但是。 期望的結果是僅預選與特定問題實例關聯的創建者。
所以這:
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是問題class 的實例化(可能之前從數據存儲中填充)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.