【问题标题】:Razor HTML dropdown list helper not selecting matching valueRazor HTML 下拉列表助手未选择匹配值
【发布时间】:2016-10-18 12:25:05
【问题描述】:

我有一个正在创建下拉列表的视图。该列表会正确填充,但不会为我正在编辑的页面选择匹配项。 在这个页面上,我正在编辑一个讲道记录。讲道模型具有它所属系列的 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;
    }
}

讲道模式

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; }
}

系列型号

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

【问题讨论】:

  • 请包含生成的 HTML
  • 简单的方法是在你的ViewModel 类中添加{ get; set; }

标签: c# asp.net-mvc razor


【解决方案1】:

在与 @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&lt;SelectListItem&gt; 并在视图中生成下拉菜单。

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

希望这会有所帮助!

【讨论】:

  • 就是这样!简单的菜鸟错误。谢谢!
  • 添加另一个属性不是正确的解决方案。添加getter-setter是。
  • 这是完全错误的。 object selectedValueDropDownListFor() 忽略 - 该方法在内部生成一个新的 SelectList 并根据其绑定到的属性的值设置所选值(这就是模型绑定的工作方式)。唯一尊重设置 selectedValue 的情况是在未绑定到模型属性时 - 例如@Html.DropDownList("NotAProperty", new SelectList(....(OP 的问题是模型包含字段,而不是属性)
  • @StephenMuecke 不,不是。在发布答案之前我已经对其进行了测试,它可以按预期工作。能否请您指出一些提到此类事情的官方文档链接?
  • 我建议你做的是研究source code,尤其是文件末尾的private 辅助方法。而且您没有正确测试它:)
猜你喜欢
  • 1970-01-01
  • 2011-05-24
  • 2015-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多