当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET MVC RC中的Html.DropDownList(刷新)不预先选择项目

如何解决《ASP.NETMVCRC中的Html.DropDownList(刷新)不预先选择项目》经验,为你挑选了1个好方法。

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

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

在我看来,我有:

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

渲染的下拉列表应该具有预先选择的id为currentItem.Id的项目,但它没有.没有选择任何内容,因此它默认为第一个.

这在我更新到RC/RC(刷新)之前有效.有任何想法吗?



1> Troy..:

如果将ViewData中键的名称与视图中表单域的名称相匹配,则HtmlHelpers旨在根据该键隐式从ViewData中提取.我建议将您的视图代码更改为:

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

HtmlHelpers在以这种方式使用时似乎效果最好(尽管并非总是可行).

更新:

为了扩展这个似乎有效的原因,而其他方法没有,我深入研究了SelectExtensions.cs的代码......

但是,您调用DropDownList,私有方法SelectInternal最终呈现实际的HTML.SelectInternal的签名如下:

SelectInternal( string optionLabel, string name, IEnumerable selectList, bool usedViewData, bool allowMultiple, IDictionary htmlAttributes )

这是DropDownList的两个用法所采用的路径:

DropDownList的( "myList中")

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

DropDownList("myItem",(SelectList)ViewData ["myList"]) DropDown

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

因此,在一天结束时,两个路径之间的区别在于,工作方式将true传递给SelectInternal的usedViewData参数,而不起作用的方式传递false.

usedViewDatafalse时,我觉得SelectInternal里面有一个bug .

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有