Razor HTML下拉列表帮助器未选择匹配值

时间:2016-10-17 17:11:19

标签: c# asp.net-mvc razor

我有一个视图,我在哪里创建一个下拉列表。列表正确填充,但不会为我正在编辑的页面选择匹配项。 在这个页面上,我正在编辑一个布道记录。布道模型具有它所属系列的id。我已经确认布道记录中的series_id和下拉列表中的匹配值都是" 1"。我通过调试`model.sermon.Series_ID并确认它是" 1"并在Chrome中使用Inspect,我看到有一个" 1"在下拉列表中的一个项目上。

有谁能告诉我为什么下拉列表没有选择匹配的系列?没有选择""即使数字也产生属性 匹配存在。

查看

@model SermonLibraryManager.ViewModels.ViewModel

@Html.DropDownListFor(model => model.sermon.Series_ID, new SelectList(Model.seriesList, "Series_ID", "Series_Title"), "-- Select --")

视图模型

namespace SermonLibraryManager.ViewModels
{
    public class ViewModel
    {
        public SermonModel sermon;
        public List<SermonModel> sermonList;
        public SeriesModel series;
        public List<SeriesModel> seriesList;
    }
}

SermonModel

public class SermonModel
{
    public int Sermon_ID { get; set; }
    public string Series_Title { get; set; }
    public int Series_ID { get; set; }
    public string Sermon_Title { get; set; }
    public DateTime Sermon_Date { get; set; }
    public string Nickname { get; set; }
    public string Last_Name { get; set; }
    public string Topic { get; set; }
    public string Description { get; set; }
    public string UStream_ID { get; set; }
    public string Vimeo_ID { get; set; }
    public int? Main_Speaker { get; set; }
}

SeriesModel

public class SeriesModel
{
    public int Series_ID { get; set; }
    public string Series_Title { get; set; }
}

1 个答案:

答案 0 :(得分:3)

在与 @Stephen Muecke 进行了非常好的讨论之后,我正在编辑答案,以避免让其他用户感到困惑。

问题是您的视图模型使用公共字段而不是属性,并且模型绑定不适用于字段,因此实际上这与使用Html.DropDownList()辅助方法相同,并且此方法接受任何值作为选择列表中的选定值。

如果您将字段转换为视图模型中的属性:

public class ViewModel
{
    public SermonModel sermon { get; set; }
    public List<SermonModel> sermonList { get; set; }
    public SeriesModel series { get; set; }
    public List<SeriesModel> seriesList { get; set; }
}

您唯一需要做的就是调用Html.DropDownListFor()方法,模型绑定将为您处理所有事情:

@Html.DropDownListFor(model => model.sermon.Series_ID, new SelectList(Model.seriesList, "Series_ID", "Series_Title"), "-- Select --")

另一个好建议是永远不要在视图模型中使用数据模型,因此最好的解决方案是在视图模型中使用IEnumerable<SelectListItem>并在视图中生成下拉列表。

感谢@Stephen Muecke指出真正的问题。

希望这有帮助!