C# 如何从ViewBag设置ASP.NET MVC DropDownList的默认值

C# 如何从ViewBag设置ASP.NET MVC DropDownList的默认值,c#,asp.net,asp.net-mvc,razor,C#,Asp.net,Asp.net Mvc,Razor,在控制器索引中,我有以下内容: ViewBag.Assignees = (await GetAllUsers()).Select(a => new SelectListItem { Text = a.DisplayName, Value = a.Username, Selected = a.DisplayName == "John Smith"

在控制器索引中,我有以下内容:

ViewBag.Assignees = (await GetAllUsers()).Select(a =>
            new SelectListItem
            {
                Text = a.DisplayName,
                Value = a.Username,
                Selected = a.DisplayName == "John Smith"
            }).OrderBy(x => x.Text).ToList();
 @Html.DropDownListFor(model => model.Assignee, 
                       ViewBag.Assignees as List<SelectListItem>, 
                       "Select Assignee", 
                       new { id = "ddlAssignee", @class = "form-control"})
我认为:

ViewBag.Assignees = (await GetAllUsers()).Select(a =>
            new SelectListItem
            {
                Text = a.DisplayName,
                Value = a.Username,
                Selected = a.DisplayName == "John Smith"
            }).OrderBy(x => x.Text).ToList();
 @Html.DropDownListFor(model => model.Assignee, 
                       ViewBag.Assignees as List<SelectListItem>, 
                       "Select Assignee", 
                       new { id = "ddlAssignee", @class = "form-control"})
@Html.DropDownListFor(model=>model.Assignee,
ViewBag.Assignees作为列表,
“选择受让人”,
新的{id=“ddl”,@class=“form control”})
dropdownlist按预期填充,但是,不设置确实存在的默认值(selected=true)。有人能告诉我上面的错误吗

更新:


通过将
SelectListItem.Value
更改为
a.DisplayName
(与
SelectedListItem.Text
相同),我实现了它。仍然不确定是什么阻止dropdownlist显示带有
Selected=true

的项目,如果
model.Assignee
带有值,并且如果是int,则默认为0,它将覆盖SelectListItem Selected值

我建议设置
模型。这里有两种我使用的方法。
Here two ways that i use.
WAY 1

@Html.DropDownListFor(model => model.Assignee, 
                      ViewBag.Assignees as List<SelectListItem>, 
                      "Value", // property to be set as Value of dropdown item
                      "Text",  // property to be used as text of dropdown item
                      "1"), // value that should be set selected of dropdown
                      new { id = "ddlAssignee", @class = "form-control"})


WAY 2 

<select name="SelectName" value="1" class="w-100">
  @foreach (var item in ViewBag.Collection) {
    <option value="@item.Id">@item.Name</option>
  }
</select>
方式1 @DropDownListFor(model=>model.Assignee, ViewBag.Assignees作为列表, “Value”,//要设置为下拉项值的属性 “Text”,//用作下拉项文本的属性 “1”),//应在下拉列表中选择设置的值 新的{id=“ddl”,@class=“form control”}) 方式2 @foreach(ViewBag.Collection中的var项){ @项目名称 }
我希望它对你有用

在视图集中:

 @Html.DropDownListFor(model => model.Assignee, 
                       ViewBag.Assignees as List<SelectListItem>, 
                       "Select Assignee", 
                       new { id = "ddlAssignee", @class = "form-control", @value = "Default value"})
@Html.DropDownListFor(model=>model.Assignee,
ViewBag.Assignees作为列表,
“选择受让人”,
新的{id=“ddl”、@class=“form control”、@value=“Default value”})

当您已经定义了列表时。 用这个


看看我的答案,看它是否正确helps@Bosco您的解决方案将填充dropdownlist并显示列表中的第一项。在我的场景中,默认值是动态的。向模型中添加新属性只是为了分配默认值似乎不是最好的方法。我的页面中有多个这样的下拉列表,我希望尽可能远离它。任何其他解决方法?我需要确定控制器中的默认值,而不是视图中的默认值。@Amidomeniko您想知道所选值吗?是的,我在视图中有一个默认文本“John Smith”controller@amindomeniko您将从select的属性名称接收它