我有以下部分视图,它会显示一个下拉列表:
@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构建对话框一次,但我更喜欢这样做,因为它感觉更干净。
答案 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