如何在 C# 中使用 ViewBag 在 DropDownList Html Helper 中显示所选值
How to show selected value in a DropDownList Html Helper using ViewBag in C#
所以我有以下场景,其中我使用了两个 ViewBag
(s):
- 获取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",
});
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
.
生成下拉列表的方法
所以我有以下场景,其中我使用了两个 ViewBag
(s):
- 获取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",
});
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
.