簡體   English   中英

為什么 Html.ListBoxFor() 不會突出顯示當前選定的項目?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM