我有一个视图,我在哪里创建一个下拉列表。列表正确填充,但不会为我正在编辑的页面选择匹配项。
在这个页面上,我正在编辑一个布道记录。布道模型具有它所属系列的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; }
}
答案 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指出真正的问题。
希望这有帮助!