2010-05-19 62 views
1

我在我的控制器中执行以下代码(编辑和创建):ASP.NET MVC的DropDownList的SelectedValue适用于编辑操作,但不能创建行动

model.Templates = new SelectList(PageManagementService.PageTemplateFetchList(), "PageId", "Title", 213); 

的“213”是一个一个id这些网页 - 只是使用它进行测试。

而且这是在我的视图(编辑和创建):

<%= this.Html.DropDownListFor(model => model.Page.TemplateId, this.Model.Templates)%> 
<%= this.Model.Templates.SelectedValue %> 

当我去创建表格,我看到下拉列表,但值的标记=“213” 不选择了。我甚至输出SelectedValue以确保它是213 - 并且我看到了213.
当我转到Edit窗体时,我看到下拉列表,并且value =“213”的标记被选中为

在创建表单上,没有任何标签具有“选定”属性。
在编辑表单上,value =“213”的标签具有“selected”属性。

我错过了什么吗?什么可能导致这个?任何人都看到过这种行为?

更新:更改下拉列表的名称使其工作。例如,而不是

<%= this.Html.DropDownListFor(model => model.Page.TemplateId, this.Model.Templates)%> 

我做

<%= this.Html.DropDownList("somedropdown", this.Model.Templates)%> 

和它的工作。不知道为什么......

回答

1

这可能是因为DataValueField是一个字符串对象,它可能有一个类型不匹配。

尝试这样:

model.Templates = new SelectList(PageManagementService.PageTemplateFetchList(), "PageId", "Title", "213"); 
+0

这没有奏效。但是,更改Dropdownlist的名称确实有效。有任何想法吗? – davekaro 2010-05-19 21:37:26

+0

但现在保存不起作用,对吧? 这个问题可能在于DropDownListFor('model => model.Page.TemplateId' ...) 这对于'EditorForModel'方法理解起来相当复杂。 在模型中添加虚拟int字段可能会使其工作:'DropDownlistFor(model => model.DummyField,Model.Templates)' – 2010-05-19 22:07:11

+0

好吧,保存工作,因为我手动从FormCollection中获取选定的值。我尝试在我的模型中添加一个虚拟int字段 - 但这也不起作用。现在,我将使用正在工作的内容。 – davekaro 2010-05-21 15:16:07