[asp.net-mvc]Html.DropDownList 在 ASP.NET MVC RC (刷新) 不预选择项

标签: Asp.net-MVC .Net C#
发布时间: 2017/3/25 10:21:23
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

在我的控制器,我具备以下条件︰

ViewData["myList"] = 
   new SelectList(itemRepository.GetAll(), "Id", "Name", currentItem.Id);

并认为具有︰

<%= Html.DropDownList("myItem", (SelectList)ViewData["myList"])%>

呈现下拉列表中应该有 currentItem.Id 预先选定的项目具有 Id 但是没用。 未选择任何内容所以它默认为第一。

这工作之前,我更新到 RC/RC(refresh)。 有什么想法?

解决方法 1:

如果你匹配的关键在可视数据视图上的窗体字段的名称的名称,HtmlHelpers 旨在从基于该密钥的 ViewData 隐式拉。我会建议更改到您查看代码︰

<%= Html.DropDownList("myList") %>

HtmlHelpers 看起来效果最好,当用这种方式 (虽然那是不可能)。

更新︰

扩大的原因为什么这似乎在其他方法不工作,我为 SelectExtensions.cs 潜入代码...

然而你调用下拉列表,该私有方法 SelectInternal 是什么最终呈现的实际的 HTML。SelectInternal 的签名看起来像︰

SelectInternal( string optionLabel, string name, IEnumerable<SelectListItem> selectList, bool usedViewData, bool allowMultiple, IDictionary<string,object> htmlAttributes )

这里是下拉列表的两个用法走的道路︰

DropDownList("myList")

DropDownList( string name ) ->
SelectInternal( null, name, htmlHelper.GetSelectData(name), true, false, null )

DropDownList("myItem",(SelectList)ViewData["myList"]) 下拉列表

List( string name, IEnumerable<SelectListItem> selectList ) ->
DropDownList( name, selectList, null /* object, htmlAttributes */ ) ->
DropDownList( name, selectList, new RouteValueDictionary(htmlAttributes) ) ->
SelectInternal( null, name, selectList, false, false, htmlAttributes )

所以在年底的一天,两个路径之间的区别是,工作方式传递真实到 SelectInternal 的usedViewData参数,而不起作用的方式传递虚假

它似乎对我是一个 bug SelectInternal 内的某处,当为falseusedViewData

官方微信
官方QQ群
31647020