SelectExtensions.DropDownList сбрасывает свойство Selected SelectListItem - PullRequest
1 голос
/ 17 января 2012

Я обнаружил странное поведение при использовании метода DropDownList в SelectExtension.Я создаю IEnumerable , где у одного из них свойство Selected установлено в значение true.Однако, когда я передаю его следующему методу, свойство Selected сбрасывается в значение «false», и поэтому в раскрывающемся списке элементов управления не выбран правильный элемент.

public static MvcHtmlString DropDownList (это HtmlHelper htmlHelper, имя строки, IEnumerable selectList);

Я даже пытался использовать класс SelectList и указал свойство SelectedValue, но все еще правильный тег

не выбирается.

Любые идеи о том, как я могу сохранить выбранное значение?

WROTE HACK, НО ПРЕДПОЧИТАЕТЕ РЕШЕНИЕ

Ниже приведенвзломать код, чтобы изменить выбранную опцию перед использованием испущенного HTML из MVC.Мне не нравится это решение, но я не знаю, как еще это сделать.

// 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 Ответ

1 голос
/ 12 сентября 2012

Framework игнорирует выбранное вами значение, потому что просматривает html.ViewData и находит ключ, соответствующий названию вашего выпадающего меню (в данном случае propertyName), и вместо этого пытается использовать значение.

Одним из решений является изменение html.ViewData перед созданием DropDownList. В твоем случае примерно так:

html.ViewData[propertyName] = source.SelectedValue;

Более общий пример:

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