【问题标题】:mvc c# html.dropdownlist and viewbagmvc c# html.dropdownlist 和 viewbag
【发布时间】:2012-08-24 15:40:45
【问题描述】:

所以我有以下(伪代码):

string selectedvalud = "C";
List<SelectListItem> list= new List<SelectListItem>();
foreach(var item in mymodelinstance.Codes){
  list.Add(new SelectListItem { Text = item.Name, Value = item.Id.Tostring(), Selected = item.Id.ToString() == selectedvalue ? true : false });
}

ViewBag.ListOfCodes = list;

在我看来:

<%: Html.DropDownList("Codes", (List<SelectListItem>)ViewBag.ListOfCodes , new { style = "max-width: 600px;" })%>

现在,在它到达视图之前,“列表”已经用项目填充它并标记了已经选择的项目。但是当它到达视图时,没有一个选项被标记为选中。

我的问题是,是否可以使用 viewbag 来传递物品,还是应该使用不同的媒介?因为如果我以这种方式使用它,它会删除选项上的选定标志。

【问题讨论】:

  • 您能否在控制器中设置断点并仔细检查list 中的至少一项是否已标记为Selected = true;?我不认为 ViewBag 会影响您的列表。
  • 是的,我这样做了,它标志着正确的选择。

标签: asp.net-mvc html.dropdownlistfor viewbag html-select


【解决方案1】:

试试这样:

ViewBag.ListOfCodes = new SelectList(mymodelinstance.Codes, "Id", "Name");
ViewBag.Codes = "C";

在你看来:

<%= Html.DropDownList(
    "Codes", 
    (IEnumerable<SelectListItem>)ViewBag.ListOfCodes, 
    new { style = "max-width: 600px;" }
) %>

为此,您的收藏中显然必须有一个 Id = "C" 的项目,如下所示:

    ViewBag.ListOfCodes = new SelectList(new[]
    {
        new { Id = "A", Name = "Code A" },
        new { Id = "B", Name = "Code B" },
        new { Id = "C", Name = "Code C" },
    }, "Id", "Name");

【讨论】:

  • 这一部分选择了“代码C”?
  • 这个:ViewBag.Codes = "C";。由于在视图中您使用 Codes 作为DropDownList 助手的第一个参数,它将从 ViewBag 中选择值。显然,如果您使用视图模型和强类型 DropDownListFor 助手并忘记 ViewBag (这是我一直向人们推荐的),事情可能会清楚一百万倍。
  • 我同意,我也会这样做。但在这种情况下,此列表中的值将附加到另一个下拉列表的另一个值,该下拉列表最终将被写入实例。我希望它以不同的方式建模..
  • 我很惊讶它奏效了。想知道,对象是如何获取价值的?那么这是否意味着如果 ViewBag 与对象(文本框、单选按钮等)的“名称”相同,那么它使用传递的值?还是只适用于下拉列表??
猜你喜欢
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多