如何在 C# 中使用 ViewBag 在 DropDownList Html Helper 中显示所选值

How to show selected value in a DropDownList Html Helper using ViewBag in C#

所以我有以下场景,其中我使用了两个 ViewBag(s):

  1. 获取select列表项
  2. 获取关注的特定项目

所以看起来像这样:

var currentType = "2";
List<SelectListItem> contentData = new List<SelectListItem>();
contentData.Add(new SelectListItem
{
    Text = "Show 0 only",
    Value = "0",
});

contentData.Add(new SelectListItem
{
    Text = "Show 2 Only",
    Value = "2",
});


ViewBag.currentType = currentType;
ViewBag.contentData = contentData;

现在在我的 Razor View 中,我可以像这样生成 DropDownList

@Html.DropDownList("ContentTypeId", (IEnumerable<SelectListItem>)ViewBag.contentData, null, new { @class = "form-control" , @style = "width: 150px;" })

我如何才能将我的 ViewBag.currentType 绑定到下拉列表中,以便它在呈现组件时默认显示预先 selected 的值?

是否可以在此组件中使用两个 ViewBag 值?

我这样试过:

@Html.DropDownList("ContentTypeId", (IEnumerable<SelectListItem>)ViewBag.contentData, null, new { @class = "form-control" , @style = "width: 150px;", @selected= (string)ViewBag.currentType})

但没有得到正确的输出。

任何tips/suggestions/solutions?

SelectListItem Class 有一个 Selected 属性。 你可以这样做:

List<SelectListItem> contentData = new List<SelectListItem>{
new SelectListItem
{
    Text = "Show 0 only",
    Value = "0",
},
new SelectListItem
{
    Text = "Show 2 Only",
    Value = "2",
    Selected = true
});

ViewBag 在您的情况下不起作用,您必须使用 Selected=true 手动 select 一个选项。 HtmlDropDown 也是一个过时的助手。

将 html5 select 与 asp 助手一起使用是自动 select 项目的最佳方式

查看

@{

var currentType = "2";
List<SelectListItem> contentData = new List<SelectListItem>();
contentData.Add(new SelectListItem
{
    Text = "Show 0 only",
    Value = "0",
});

contentData.Add(new SelectListItem
{
    Text = "Show 2 Only",
    Value = "2",
});

//or I guess you can take the from viewbag

string currentType = ViewBag.currentType;
List<SelectListItem> contentData = ViewBag.currentData
}

.....

<select class="form-control" id="levels" asp-for="@currentType" 
asp-items="@contentData">
         <option value="0" > Select </option>
</select>

这适用于下拉列表

@{
currentType = ViewBag.currentType;
contentData = ViewBag.contentData;

var dropDownItems = new SelectList(contentData,"Value","Text", currentType);
}
.....

@Html.DropDownList("@currentType",@dropDownItems,"Select",new { @class = "form-control" }) 

我也想post回答一下我在这方面的尝试,并且能够实现。我使用了定义纯 HTML 元素的标准方法,而不是使用 Razor 辅助标记。如果你有不属于 Model:

的动态元素,你可以这样做
<select class="form-control" id="ContentDataId" name="ContentDataId">
    @foreach (SelectListItem option in ViewBag.contentData as List<SelectListItem>)
    {
        <option value="@option.Value" @(option.Value == Convert.ToString(ViewBag.currentType) ? "selected='selected'" : "")>@option.Text</option>
    }
</select>

如果您使用了辅助标签,上述定义将生成相同的 HTML。对于那些使用辅助标签感到困惑的人,这是一种更传统的使用动态 ViewBag.

生成下拉列表的方法