如何在 DropDownListFor 中选择数据库中的当前值

本文关键字:数据库 选择 DropDownListFor | 更新日期: 2024-10-25 03:29:24

我有一个Shop模型:

public class Shop
{
    public int ShopId { get; set; }
    [Display(Name = "Winkel")]
    public string Name { get; set; }
    public virtual ICollection<Category> Categories { get; set; }
}

Weekday的模型:

public class WeekDay
{
    public int WeekDayId { get; set; } // Integers from 0 to 6 where Sunday is 0 and Saturday 6
                                 // so that it maps with the DayOfWeek enumeration
    [Required]
    [Display(Name = "Dag")]
    public string Day { get; set; }
    public int? ShopId { get; set; }
    public virtual Shop Shop { get; set; }
}

现在我的目标是显示七天,旁边有一个下拉列表,其中包含可供选择的商店。我希望能够显示属于下拉列表中当前选择的Html.DropDownList(For)中选择的日期的当前商店。下一步也是最后一步是能够单击一个按钮并保存所有当前选定的值并更新数据库中的WeekDay表,如下所示:

WeekDayId    ShopId    Day
1            NULL      Zondag
2            1         Maandag
3            1         Dinsdag
4            1         Woensdag
5            1         Donderdag
6            2         Vrijdag
7            NULL      Zaterdag

为此,我制作了以下视图模型:

public class ShopWeekDayViewModel
{
    public IEnumerable<Shop> ShopItems { get; set; }
    public List<WeekDay> WeekDays { get; set; }
}

然后在视图中,我显示不同的WeekDayShop s,如下所示:

@model ViewModels.ShopWeekDayViewModel
<table>
@foreach (var weekDay in Model.WeekDays)
    {
        <tbody>
            <tr>
                <td>
                   @Html.DisplayFor(d => weekDay.Day)
                </td>
                <td>
                    @Html.DropDownListFor(m => weekDay.Shop.ShopId, 
                        new SelectList(Model.ShopItems, 
                                     "ShopId", 
                                     "Name", 
                                     Model.ShopItems), 
                      "")
                </td>
            </tr>
        </tbody>
    }
</table>

现在没有选择DropDownListFor中的当前值(来自数据库 - 因此当前与工作日连接的实际商店),我不知道如何实现这一目标。我希望有人可以帮助我。

如何在 DropDownListFor 中选择数据库中的当前值

试试这个:

@Html.DropDownListFor(m => weekDay.Shop.ShopId, 
    new SelectList(Model.ShopItems, 
        "ShopId", 
        "Name", 
        weekDay.Shop.ShopId)
)

SelectList构造函数的最后一个参数是表示所选值的object。 目前,您正在为该参数传入IEnumerable,这没有任何意义,因为您要选择单个值。 另请注意,我使用的是 weekDay.Shop.ShopId ,而不是 Model.Shop.ShopId ,以便引用属于当前WeekDayShop

您正在将"SelectList选定"值设置为项目列表。

将其更改为使用不同的重载,并且没有选定的值

new SelectList(Model.ShopItems, "ShopId", "Name")

所以你看就变成了:

@model 视图模型.商店周日视图模型

<table>
@foreach (var weekDay in Model.WeekDays)
    {
        <tbody>
            <tr>
                <td>
                   @Html.DisplayFor(d => weekDay.Day)
                </td>
                <td>
                    @Html.DropDownListFor(m => weekDay.Shop.ShopId, 
                        new SelectList(Model.ShopItems, 
                                     "ShopId", 
                                     "Name"))
                </td>
            </tr>
        </tbody>
    }
</table>