【问题标题】:MVC 4 @Html.DropDownListFor() not passing model values to dropdownMVC 4 @Html.DropDownListFor() 没有将模型值传递给下拉列表
【发布时间】:2013-05-02 17:35:19
【问题描述】:

我是 MVC 的新手,正在尝试一个测试应用程序来弄湿我的脚。此应用程序的一部分是生成带有下拉框的表单。我用

@Html.DropDownListFor() 来生成这个,并且在创建表单上下拉工作正常。但是当我进入编辑表单时,模型值没有传递给下拉列表。

选择列表项

 public static string[] OnOffList()
    {
        var ret = new string[] { "On", "Off" };
        return ret;
    }

表格代码

@Html.DropDownListFor(model => model.ServiceCondition, new SelectList(OnOffDropDownHelper.OnOffList()))

对于本例,假设 model.ServiceCondition = "Off"。

出于某种原因,每当我调用此表单时,下拉值总是“打开”,它似乎完全忽略了模型值。

我也试过了

@Html.DropDownListFor(model => model.ServiceCondition, new SelectList(OnOffDropDownHelper.OnOffList(), "Off"))

强制“关闭”值,但它仍然显示为“打开”作为下拉列表中的选定值。

我想重申一下,我知道模型值是“关闭”,并且我使用相同的 @Html.DropDownListFor() 创建了一个相同的“创建”表单,它能够将值传递给模型很好。

就像我说的,我是 MVC 的新手,因此我们将不胜感激。

谢谢。

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor


    【解决方案1】:

    我认为您必须设置 IsSelected 属性。这总是对我有用:

    首先,只需在模型中放置一个属性来整理 View 代码:

    public List<SelectListItem> OnOffDDL
    {
        get
        {
            return OnOffDropDownHelper.OnOffList()
                .Select(s => new SelectListItem
                             {
                                 Text = s,
                                 Value = s,
                                 Selected = ServiceCondition == s
                             })
                .ToList();
        }
    }
    

    然后做:

    @Html.DropDownListFor(model => model.ServiceCondition, model.OnOffDDL)
    

    【讨论】:

      【解决方案2】:

      这可能有点矫枉过正,但如果您的模型可以根据模型本身有不同的选项(即使现在它只是打开和关闭),这将很有帮助。就像将来如果某些项目可能具有“待机”模式等,您将从数据库中获取该特定项目的实际选项。

      使用 SelectList 作为源,因此您的模型可以:

      public List<SelectListItem> OnOffList{ get; set; }
      

      然后在您的控制器中填充模型,例如:

      model.OnOffList.Add(new SelectListItem()
      {
          Text = "On",
          Value = "On"
      });
      

      ...等等。

      然后您可以将所选项目设置为:

      @Html.DropDownListFor(m => m.ServiceCondition, new SelectList(Model.OnOffList(), "Value", "Text", Model.ServiceCondition))
      

      【讨论】:

        【解决方案3】:

        原来是我的菜鸟错误。

        曾经设计过数据库的人将字段 ServiceCondition 设置为 nchar(8),在“on”、“Off”值的末尾留下空白。

        相关字段中的 .Trim() 解决了该问题。

        非常感谢您的帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多