【发布时间】:2012-11-27 19:06:45
【问题描述】:
在使用 SelectList 时,ASP.NET MVC 中的 HtmlDropDownList 有点问题。
我的问题是,我有一个包含视频剪辑记录的数据库,每条记录都有一个名为 Type 的属性,它可以是 Embedded 或 Youtube。
然后我将这些记录显示为部分视图中的可编辑记录。这很好用,在初始页面加载时,所有下拉列表都会显示每条记录的正确值。
当我通过编辑记录并单击该行上的“保存”来提交对记录的更改时,它会提交一个 AJAX 表单(使用 Ajax.BeginForm),该表单再次使用整个部分视图更新整个面板 - 这应该会反映更改因为它会从数据库中重新抓取所有内容。
但是,当页面重新加载/更新时,所有下拉菜单都会恢复为列表中的第一项作为默认选择值...我可以在数据库中验证这些值仍然是它们应该是的(即它们不会全部更改为第一个值),并且我还可以通过断点确认,在视图显示之前,所有值都正确通过。
任何人都可以对此有所了解吗?
我正在显示这样的下拉列表:
<%=Html.DropDownList("Type", "Embedded,Youtube".ToSelectList(item.Type), new { style = "width: 100px;"})%>
“ToSelectList”只是一个从逗号分隔的字符串创建选择列表的扩展方法,参数是要用作选择值的值。
-
解决方案
问题是,我使用“Type”作为 DropDownList 的名称,因此所有下拉列表都具有相同的 ID 字段,这意味着它们都采用相同的值。相反,我将它们更改为“{item.ID}.Type”,然后在我的控制器中,我只是将我的 UpdateModel 语句的前缀指定为“{id}”。
var prefix = id.HasValue ? id.Value + "." : "";
UpdateModel(item, prefix, null, new[] { "Featured", "X-Requested-With" });
【问题讨论】:
标签: asp.net-mvc ajax