簡體   English   中英

ListBoxFor MultiSelectList不選擇值

[英]ListBoxFor MultiSelectList does not select values

我非常困惑,因為這看起來應該很簡單,但是我無法用選擇的值填充ListBox 我查看了其他幾個答案,但無法弄清楚自己在做什么錯。

這是我的模型:

public class ItemViewModel
{
    public IEnumerable<Item> AllItems { get; set; }
    public IEnumerable<Item> SelectedItems { get; set; }
}

public class Item
{
    public string Id { get; set; }
    public string Name { get; set; }
}

這是我的控制器動作:

public ActionResult ListBoxTest()
{
    var viewModel = new ItemViewModel()
    {
        AllItems = new List<Item>()
        {
            new Item()
            {
                Id = "1",
                Name = "Name1"
            },
            new Item()
            {
                Id = "2",
                Name = "Name2"
            }
        },
        SelectedItems = new List<Item>()
        {
            new Item()
            {
                Id = "1",
                Name = "Name1"
            }
        }
    };
    return this.View(viewModel);
}

這是我視圖中的行(使用默認的MVC視圖模板):

@Html.ListBoxFor(m => m.SelectedItems, new MultiSelectList(Model.AllItems, "Id", "Name", Model.SelectedItems.Select(s => s.Id)), new { multiple = "multiple"})

我也試過省略選定的值:

@Html.ListBoxFor(m => m.SelectedItems, new MultiSelectList(Model.AllItems, "Id", "Name"), new { multiple = "multiple"})

並將選定的值作為列表:

@Html.ListBoxFor(m => m.SelectedItems, new MultiSelectList(Model.AllItems, "Id", "Name", Model.SelectedItems.Select(s => s.Id).ToList()), new { multiple = "multiple"})

但是,無論我做什么,都不會選擇列表項。 我究竟做錯了什么?

您不能將<select>元素綁定到復雜對象的集合。 多重選擇僅回發簡單值的數組-所選選項的值。

您的模型需要

public class ItemViewModel
{
    public IEnumerable<Item> AllItems { get; set; }
    public IEnumerable<int> SelectedItems { get; set; }
}

並在控制器中

SelectedItems = new List<int>(){ 1 }

然后使用

@Html.ListBoxFor(m => m.SelectedItems, new SelectList(Model.AllItems, "Id", "Name")

將在下拉列表中選擇第一個選項。

請注意, ListBoxFor()方法設置了multiple="multiple"因此無需再次設置它。 另外,在SelectList() (或MultiSelectList() )構造函數中設置last參數是沒有意義的。 它是您綁定到的屬性的值,該屬性確定選擇了什么,並且ListBoxFor()方法在內部忽略該參數。

我還建議您的財產應該是

public IEnumerable<SelectListItem> AllItems { get; set; }

這樣你就可以簡單地使用

@Html.ListBoxFor(m => m.SelectedItems, Model.AllItems)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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