0

我试图更改现有项目中的代码以使 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 不是我的菜,所以它也可能只是语法错误。任何输入表示赞赏。

4

1 回答 1

0

在 MVC 中,如果视图是强类型的,则选择列表的 selected 选项将被覆盖,并且在构造函数上设置的 selected 选项属性将永远不会到达视图,而是会选择下拉列表中的第一个选项(为什么仍然有点神秘) . 为了克服这个问题,所有需要做的就是将视图中的 DropDownList 以及控制器中 ViewData 键的名称重命名为 model 中设置的名称以外的名称,然后所选选项将到达视图。不幸的是,在发布表单时,您将不得不从 FormCollection 访问所选选项的值,而不是有点烦人的强类型对象。

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

于 2013-05-28T09:09:52.327 回答