SelectExtensions.DropDownList重置SelectListItem的Selected属性

时间:2012-01-17 18:51:10

标签: asp.net-mvc-3 selectlistitem

使用SelectExtension的DropDownList方法时,我发现了一种奇怪的行为。我创建了一个IEnumerable< SelectListItem>其中一个人的选中属性设置为'true'。但是,当我将其传递给以下方法时,选定的属性将重置为“false”,因此下拉控件没有选择正确的项目。

public static MvcHtmlString DropDownList(这个HtmlHelper htmlHelper,字符串名称,IEnumerable selectList);

我甚至尝试使用SelectList类并指定了SelectedValue属性,但仍然是正确的<选项>标签未被选中。

有关如何维持所选值的任何想法?

WROTE HACK但是会优先解决方案

下面是在使用MVC发出的Html之前更改所选选项的代码hack。我不喜欢这个解决方案,但我不知道怎么回事。

// the following is a hack due to a precived MVC 3 bug
var html = SelectExtensions.DropDownList(helper, propertyName, source).ToHtmlString();
html = html.Replace("selected=\"selected\"", string.Empty);
html = html.Replace(string.Format("value=\"{0}\"", source.SelectedValue), string.Format("value=\"{0}\" selected=\"selected\"", source.SelectedValue));

1 个答案:

答案 0 :(得分:1)

框架忽略了您选择的值,因为它会查看html.ViewData并找到与您的下拉列表名称匹配的密钥(在这种情况下为propertyName)并尝试使用该值。

一种解决方案是在创建DropDownList之前更改html.ViewData。在你的情况下,像这样:

html.ViewData[propertyName] = source.SelectedValue;

更通用的例子:

html.ViewData['name of your DDL'] = 'The real value you want selected';