MVC .NET DropdownList 选定值

MVC .NET DropdownList selected value

我的模型下拉列表有问题。我无法设置默认选择值。这是我的代码。 Select 列表定义:

var productGroups = db.sl_GrupaKh.AsNoTracking()
        .Where(g => g.kh__Kontrahent.Any())
        .Select(n => new {n.grk_Id, n.grk_Nazwa })
        .OrderBy(n => n.grk_Nazwa).ToList();
        productGroups.Add(new { grk_Id = 0, grk_Nazwa = "(" + Resources.Resources.NoneLabel + ")" });
        productGroups.Add(new { grk_Id = -1, grk_Nazwa = "(" + Resources.Resources.AnyLabel + ")" });

        var selectedItem = productGroups.SingleOrDefault(x=>x.grk_Id==selected);
        SelectList selectList = new SelectList(productGroups,"grk_Id","grk_Nazwa",selected);

grk_Id-int型,grk_Nazwa-string型,选-int型 我看到 selected 与选项值之一相匹配。

现在查看代码:

    @Html.DropDownListFor(m => m.customerMenu, Model.customerMenu,
new  {@class="myClass" })

并输出:

<select class="dasdas" id="customerMenu" name="customerMenu">
<option value="2">Drogerie</option>
<option value="3">Fabryki</option>
<option value="4">Hurtownie</option>
<option value="5">Importerzy</option>
<option value="1">Podstawowa</option>
<option value="6">Sklepy</option>
<option value="0">(brak)</option>
<option value="-1">(dowolna)</option>
</select>

我期待着任何帮助。谢谢 :)

你可以使用 List<SelectListItem> 而不是 SelectList 你只需要从中取胜,不再有硬编码字符串,并且你确定 Selected 项目是 true 当你想要的时候。

var selectedItem = productGroups.SingleOrDefault(x=>x.grk_Id==selected);
List<SelectListItem> selectList = productGroups.Select(c => new SelectListItem
        {
            Text = c.grk_Nazwa,
            Value = c.grk_Id,
            Selected = selectedItem != null && selectedItem.grk_Id == c.grk_Id
        });

注意:如果你不能改变SelectList试试这个SO answer,这将帮助你从List<SelectListItem>转换成SelectList.

我认为这是一个错误

SelectList selectList = new SelectList(productGroups,"grk_Id","grk_Nazwa",selected);

这个

var selectedItem = productGroups.SingleOrDefault(x=>x.grk_Id==selected);

必须改成这样

var selectedItem = productGroups.SingleOrDefault(x=>x.grk_Id==selected).grk_Id;

也许使用 NullReferenceCheck。