Html.DropDownList选择的值不起作用(使用带有IEnumberable的构造函数<selectlistitem> </selectlistitem>

时间:2013-10-24 12:55:37

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

我遇到的问题是所选值不适用于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" })

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

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

8 个答案:

答案 0 :(得分:46)

你在这里遇到同样的问题:

  

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" })

答案 1 :(得分:3)

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

在控制器中

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)

答案 2 :(得分:2)

我不喜欢你可以使用

的事实
@Html.DropDownList("NewsItemID") 

它有效。然后你需要添加'class'属性,然后它会突然中断。我看到一个地方在工作,另一个地方没有使用语法

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

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

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

答案 3 :(得分:1)

首先,您如何填充ViewBag.NewsItemId.Items?我们没有看到价值来自哪里。

为了使选定的值有效,它必须与集合的元素具有相同的类型。如果item.NewsItemId的类型为T,则ViewBag.NewsItemId.Items必须是IEnumerable<T>类型(或实现它的任何其他集合类型)。情况似乎并非如此,因为您将NewsItemId设置为所选值,而您的集合基于NewsItemId.Items,可能不是同一类型。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

@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名称已更改。也改变了控制器。

答案 7 :(得分:0)

我有同样的问题。在下面的示例中,变量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"
...