List在视图中安全地转换为SelectList
本文关键字:安全 转换 SelectList 视图 SelectListItem List | 更新日期: 2023-09-27 18:12:46
我正在跟踪一个问题,OP有这样的东西
[HttpGet]
public ActionResult Index() {
var options = new List<SelectListItem>();
options.Add(new SelectListItem { Text = "Text1", Value = "1" });
options.Add(new SelectListItem { Text = "Text2", Value = "2" });
options.Add(new SelectListItem { Text = "Text3", Value = "3" });
ViewBag.Status = options;
return View();
}
然后在视图中可以这样做
@Html.DropDownList("Status", ViewBag.Status as SelectList)
我的期望是cast的结果是null
,我也这么说过。我纠正说,它应该工作,它是通过。net提琴演示。令我惊讶的是,下拉列表中填满了这些项目。
我的问题:如何在视图中完成时,List<SelectListItem>
安全地转换为SelectList
这是个好问题。我进一步研究了这个问题,实际上,如果selectList
参数为空,则使用name
参数查找ViewData
中的键。
我基于http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/5cb74eb3b2f3#src/System.Web.Mvc/Html/SelectExtensions.cs
他们甚至加了一个注释:
private static MvcHtmlString SelectInternal(this HtmlHelper htmlHelper, ModelMetadata metadata, string optionLabel, string name, IEnumerable<SelectListItem> selectList, bool allowMultiple, IDictionary<string, object> htmlAttributes)
{
...
// If we got a null selectList, try to use ViewData to get the list of items.
if (selectList == null)
{
selectList = htmlHelper.GetSelectData(name);
...
之后,name
被使用:
private static IEnumerable<SelectListItem> GetSelectData(this HtmlHelper htmlHelper, string name)
{
object o = null;
if (htmlHelper.ViewData != null)
{
o = htmlHelper.ViewData.Eval(name);
}
...
问得好@Nkosi。我不知道这是可能的。