21

我有一个问题,即所选值不适用于 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" })

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

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

4

8 回答 8

50

你在这里有同样的问题:

DropDownListFor 不选择值

问题出在您的 ViewBag 属性名称中。因为它与您在 Model 中的属性相同,所以它不起作用。您应该将 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" })
于 2013-10-24T13:39:06.203 回答
4

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

在控制器中

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)

于 2014-09-26T05:56:14.313 回答
2

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

@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" })
于 2014-05-28T20:25:22.260 回答
1

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

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

于 2013-10-24T13:10:37.473 回答
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"
...
于 2019-07-11T17:29:50.817 回答
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名字变了。控制器也发生变化。

于 2017-06-02T04:53:55.477 回答
0

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

于 2017-06-02T04:25:44.827 回答
0

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

@Html.DropDownList("Some_Name_that_does_not_exist_in_model", ViewBag.NewsItemId as SelectList, string.Empty, new { @class = "form-control" })
于 2017-04-11T12:49:51.177 回答