使用ViewBag作为SelectList选择DropDownListFor的默认值

时间:2017-07-12 22:25:34

标签: asp.net-mvc

在我的控制器中,我有一个存储在ViewBag中的代理列表

ViewBag.Agents = new SelectList(db.Users.ToList(), "Id", "UserName", string.Empty);

在我的视图中,我将其显示为DropDownListFor

 @Html.DropDownListFor(model => a.AgentList, ViewBag.Agents as SelectList, new { @class = "form -control", @style = "width:130px; height:30px" })

但是,我的列表未将已选择的代理显示为默认。我错过了什么?如何设置下拉列表以将所选代理显示为默认值?

我甚至试过这个但没有任何作用:

 @Html.DropDownListFor(model => a.AgentList, new SelectList( ViewBag.Agents as SelectList, a.AgentName), new { @class = "form -control", @style = "width:130px; height:30px" })

这是我的模特

[Display(Name = "Agent ID")]
public string AgentID { get; set; }
[Display(Name = "Agent Name")]
public string AgentName { get; set; }
[Display(Name = "Agent")]
public List<ApplicationUser> AgentList { get; set; }

感谢您的帮助

4 个答案:

答案 0 :(得分:1)

请使用以下步骤绑定 DropDownListFor 中的所选值。

步骤: - 1 ViewBag.Agents= db.Users.ToList();

步骤: - 2 @Html.DropDownListFor(model => Model.AgentID, new SelectList(ViewBag.Agents, "Id", "UserName",2))

答案 1 :(得分:0)

尝试:

@Html.DropDownListFor(model => a.AgentList, new SelectList( ViewBag.Agents, Model.AgentName), new { @class = "form -control", @style = "width:130px; height:30px" })

答案 2 :(得分:0)

您好,您使用了selectlist

的重载

SelectList Constructor (IEnumerable, String, String, Object)

public SelectList(
    IEnumerable items,
    string dataValueField,
    string dataTextField,
    object selectedValue
)

它将使用列表的指定项,数据值字段,数据文本字段和选定的值初始化SelectList类的新实例。

所以你的代码会改变如下:

ViewBag.Agents = new SelectList(db.Users.ToList(), "Id", "UserName", 10 /*Default user Id*/);

答案 3 :(得分:0)

我发现,如果表单绑定到模型,模型值(默认情况下可能为空)将覆盖 ViewBag 列表设置的任何选定值。所以,最好在模型内部设置默认值。

例如:

[表单的ViewModel] ModelFormType ViewModel = new ModelFormType(); ModelFormType.UserId = 11(默认用户 ID)。