【问题标题】:Html.DropDownList Selected Value Not Working (Using Constructor with IEnumerable<SelectListItem>)Html.DropDownList 所选值不起作用(使用带有 IEnumerable<SelectListItem> 的构造函数)
【发布时间】:2013-11-03 04:44:24
【问题描述】:

我有一个问题,即所选值不适用于 Html.DropDownList 辅助方法。见下文:

这是我的控制器:

public ActionResult Edit(int id = 0)
{
    NewsEvent item = GetItem(id);
    ViewBag.NewsItemId = new SelectList(ViewBag.NewsItemId.Items, "Id", "Name", item.NewsItemId);

    return View(item);
}

这是我的观点:

@Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, string.Empty,
                           new { @class = "form-control" })

但是,当我在视图中尝试以下操作时,它可以工作:

@Html.DropDownList("NewsItemId", string.Empty)

以下也可以,但由于字段名称与模型不匹配,因此无法正确发布。

@Html.DropDownList("NewsItemIdDrop",ViewBag.NewsItemId as SelectList, string.Empty,
                           new { @class = "form-control" })

我需要使用第一个选项的原因是我可以将类属性添加到控件。

有人可以帮我理解我做错了什么吗?

【问题讨论】:

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


【解决方案1】:

我遇到了同样的问题。在下面的示例中,变量 ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] 有一个带有默认选定值的 SelectListItem 列表,但这样的属性不会在视觉上反映出来。

// data 
        var p_estadoAcreditacion = "NO";
        var estadoAcreditacion = new List<SelectListItem>();
        estadoAcreditacion.Add(new SelectListItem { Text = "(SELECCIONE)"    , Value = " "    });
        estadoAcreditacion.Add(new SelectListItem { Text = "SI"              , Value = "SI"   });
        estadoAcreditacion.Add(new SelectListItem { Text = "NO"              , Value = "NO"   });

        if (!string.IsNullOrEmpty(p_estadoAcreditacion))
        {
            estadoAcreditacion.First(x => x.Value == p_estadoAcreditacion.Trim()).Selected = true;
        }
         ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] = estadoAcreditacion;

我通过使 DropdownList 的第一个参数与 id 属性不同来解决它。

// error:
@Html.DropDownList("SELECT__ACREDITO_MODELO_INTEGRADO"
, ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] as List<SelectListItem>
, new
{
id         = "SELECT__ACREDITO_MODELO_INTEGRADO"
...
// solved :
@Html.DropDownList("DROPDOWNLIST_ACREDITO_MODELO_INTEGRADO"
, ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] as List<SelectListItem>
, new
{
id         = "SELECT__ACREDITO_MODELO_INTEGRADO"
...

【讨论】:

    【解决方案2】:
    @Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, string.Empty,
        new { @class = "form-control" })
    

    改成

    @Html.DropDownList("NewsItemId", ViewBag.NewsItemIdList as SelectList, string.Empty, 
        new { @class = "form-control" })
    

    ViewBag.NewsItemIdList 名称已更改。控制器也发生变化。

    【讨论】:

      【解决方案3】:

      将 viewbag 属性名称更改为页面上使用的模型变量名称。

      【讨论】:

      • 您能否提供更多关于如何解决问题的详细信息?
      【解决方案4】:

      您应该更改 DropDownList 字段的名称:

      @Html.DropDownList("Some_Name_that_does_not_exist_in_model", ViewBag.NewsItemId as SelectList, string.Empty, new { @class = "form-control" })
      

      【讨论】:

        【解决方案5】:

        我尝试了很多东西,但最终让它像这样工作

        在控制器中

        int valittu_tila = 1;
        var tapahtumantilat = new List<SelectListItem>();
        
        tapahtumantilat.Add(new SelectListItem { Text = "Tapahtumaa kirjataan", Value = "0" });
        tapahtumantilat.Add(new SelectListItem { Text = "Odottaa jonossa", Value = "1"});
        tapahtumantilat.Add(new SelectListItem { Text = "Tapahtumaa käsitellään", Value = "2"});
        
        ViewBag.tilalista = new SelectList(tapahtumantilat, "Value", "Text", valittu_tila);
        

        然后在我刚刚放的视图中(我在这里也有 onchange 事件和下拉类,但如果你愿意,你可以删除它们)。

        @Html.DropDownList("tuki_tila", ViewBag.tilalista as SelectList, "-- valitse tila --", new { @onchange = "executeticketsearch();", @class = "haku_dropdowns" })
        

        (对文本值和变量名中的芬兰语感到抱歉,但这些不重要:D)

        【讨论】:

          【解决方案6】:

          我不喜欢你可以使用的事实

          @Html.DropDownList("NewsItemID") 
          

          它有效。然后你需要添加“类”属性,突然它就坏了。我看到一个地方工作,另一个地方不工作使用语法

          @Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, string.Empty,
                                 new { @class = "form-control" })
          

          当我对此进行研究时,我确定 ViewBag.NewsItemId 实际上是视图中的空值。因此,具有相同名称的 Model 和 ViewBag 字段的工作语法是

          @Html.DropDownList("NewsItemId", null, string.Empty,
                                 new { @class = "form-control" })
          

          【讨论】:

            【解决方案7】:

            你也有同样的问题:

            DropDownListFor Not Selecting Value

            问题在于您的 ViewBag 属性名称。因为它与您在模型中的属性相同,所以它不起作用。您应该将 ViewBag 道具的名称更改为其他名称,例如:

            ViewBag.NewsItemList = new SelectList(ViewBag.NewsItemId.Items, "Id", "Name", item.NewsItemId);
            

            并在视图中

            @Html.DropDownList("NewsItemId",ViewBag.NewsItemList as SelectList, string.Empty,
                                       new { @class = "form-control" })
            

            【讨论】:

            • 这里有同样的问题。谢谢
            • 那个虫子很邪恶。不使用 ViewBags 和 View Dictionaries 的一个很好的理由。这是 .NET 4.5 的错误吗?它可能在升级时坏了...?
            • 即使我更改了 viewbag 名称,我也遇到了同样的问题。
            • 为什么所有的解决方案都是这样的。简单明了,没有绒毛。感谢负载
            【解决方案8】:

            首先,如何填充 ViewBag.NewsItemId.Items ?我们看不到价值从何而来。

            为了使选定的值起作用,它必须与集合元素的类型相同。如果item.NewsItemIdT 类型,ViewBag.NewsItemId.Items 必须是IEnumerable&lt;T&gt; 类型(或任何其他实现它的集合类型)。似乎并非如此,因为您将NewsItemId 设置为选定值,而您的集合基于NewsItemId.Items,而NewsItemId.Items 可能不是同一类型。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-05-16
              • 1970-01-01
              • 1970-01-01
              • 2015-07-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多