2013-05-28 50 views
0

我试图改变现有项目中的代码,使DropDownListFor选择一个项目。我读了无数的线程,但我没有得到一个特定的项目被选中;DropDownListFor使用ViewData

这就是我得到的;

控制器;

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不是我的一杯茶,所以它可能只是一个语法错误。任何输入赞赏。

回答

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/

+0

嗨!并感谢您的答复。我试图在视图和控制器中将MyDropDownList重命名为TADAAAA,但没有任何运气。我做对了吗? – Tim

+0

请将您的代码更改为以下新的SelectList(_myRepository.GetData,“data_id”,“name”,new {data_id = 5edee514-e6ca-456f-a8fa-71bde67351a1}); –

+0

啊,看起来合乎逻辑,你现在写在VB中吗? – Tim