HTML.SelectListFor selectedValue永远不会被设置

时间:2011-06-26 11:08:09

标签: asp.net-mvc-3 razor

我有以下部分视图,它会显示一个下拉列表:

 @model MartinDog.Core.Models.Section
 @{
    @Html.DropDownListFor(x=>x.Name
                          , new SelectList(Model.Dock.DockTemplate.Columns, 
                              "Id", "FriendlyName", 
                               Model.DockTemplateColumn.Id.ToString())
                          , new { @id = "ddlb_dockTemplateColumns" + 
                               Model.Id.ToString()})    
 }

我在我的页面上渲染它,如下所示:

@{Html.RenderPartial("_Admin_Page_DockTemplateColumnDropDown", Model);}

为每个Section对象渲染一次局部视图。我创建的一个Section对象,可以在jquery对话框中编辑(更改名称,显示顺序,停靠模板列等)。

在我正在使用的测试页面上,此Section对话框呈现四次(因为我的父对象中有四个)。

问题: * 下拉菜单的SelectList中的SelectedValue永远不会被设置 * - 也就是说,当显示对话框时,永远不会选择下拉列表中的正确项目我无法理解为什么。

我认为这可能是因为下拉列表被渲染了四次,所以我尝试仅针对其中一个“章节”进行渲染,但仍然存在同样的问题。

任何人都知道我能做什么?

***编辑 不知道我是不是以一种狡猾的方式做到这一点。我曾经想过用jquery和json构建对话框一次,但我更喜欢这样做,因为它感觉更干净。

2 个答案:

答案 0 :(得分:0)

我这样做:

在控制器操作中(例如编辑):

ViewData["ProvinceID"] = new SelectList(dc.Provinces.OrderBy(p => p.NameAr), "ID", "NameAr", factory.ProvinceID);

和Markup:

<%: Html.DropDownList("ProvinceID") %>

请参阅?所以它是一个工厂列表,它有一个Province字段,我想让你注意的是SelectList构造函数中的第4个参数,我传递factory.ProvinceID所以DropDownList知道哪个选项要开始。否则DropDownList将显示默认值(第一个)。

P.S:改变Razor语法是你的工作;我不使用它。

希望有所帮助。

答案 1 :(得分:0)

Doh ......修复 - 完全是我自己的错。

我已经像我这样设置了html.dropdownlist @ Html.DropDownListFor(X =&GT; x.Name,

应该如此: @ Html.DropDownListFor(X =&GT; x.DockTemplateColumn.Id,

将第一个参数设置为x =&gt; x.DockTemplateColumn.Id(唯一标识列表中的项目)而不是x.Name直接修复了问题。

我以为我会在这里发布,以防其他人犯同样的错误。

修改 在这里找到答案: C# mvc 3 using selectlist with selected value in view