DropDownListFor使用ViewData

时间:2013-05-28 08:53:10

标签: c# asp.net asp.net-mvc vb.net

我试图更改现有项目中的代码以使DropDownListFor选择项目。我已经阅读了无数的线程,但我没有得到一个特定的项目来选择;

这就是我得到的;

控制器;

ViewData("MyDropDownList") = new SelectList(_myRepository.GetData, "data_id", "name"})  

查看;

@Html.DropDownListFor(Function(m) m.data_id, TryCast(ViewData("MyDropDownList"), SelectList))

这会产生一个很好的列表,看起来像这样;

<select id="someId" name="someName" data-val="true">
<option value="aec385a7-bd77-4b94-9fbb-130487e3e62e">Option1</option>
<option value="5edee514-e6ca-456f-a8fa-71bde67351a1">Option2</option>
<option value="8a293328-8b11-47b7-bc9a-ceddf2e6a355">Option3</option>
</select>

在阅读之后,我非常确定这可以用于选择“Option2”;

ViewData("MyDropDownList") = new SelectList(_myRepository.GetData, "data_id", "name", "5edee514-e6ca-456f-a8fa-71bde67351a1"})

但它没有,我也试过了;

  ViewData("MyDropDownList") = new SelectList(_myRepository.GetData, "data_id", "name", New With {Key .id = "5edee514-e6ca-456f-a8fa-71bde67351a1"} })

我做错了什么? VB不是我的一杯茶,所以它可能只是一个语法搞砸了。任何意见都表示赞赏。

1 个答案:

答案 0 :(得分:0)

在MVC中,如果视图是强类型的,则选择列表的选定选项将被覆盖,并且构造函数上设置的选定选项属性将永远不会到达视图,并且将选择下拉列表中的第一个选项(为什么还有一点一个谜。)要解决此问题,需要做的就是将视图中的DropDownList以及控制器中ViewData键的名称重命名为模型中设置的名称之外的其他名称,然后所选选项将到达视图。不幸的是,在发布表单时,您必须从FormCollection访问所选选项的值,而不是一个有点烦人的强类型对象。

来源:http://www.dotnetguy.co.uk/post/2009/06/25/net-mvc-selectlists-selected-value-does-not-get-set-in-the-view/