ASP.NET MVC 3 - сбрасывает DropDownListFor, если параметр URL также существует с тем же именем, что и параметр модели представления - PullRequest
3 голосов
/ 23 февраля 2012

Я не уверен, является ли это ошибкой с расширением DropDownListFor или чем, но у нас было следующее:

http://mydomain.com/path/page?myparam=myvalue

В моей модели просмотра у меня есть следующее:

public string MyParam { get; set; }
public List<SelectListItem> ParamOptions { get; set; }

Когда я делаю следующее в моем просмотре, он не может выбрать правильное значение:

@Html.DropDownListFor(x => x.MyParam, Model.ParamOptions, "Select Value")

Однако, когда я изменяю параметр «MyParam» в моей модели представления на «MyParam2» и обновляю мой «Вид», чтобы вместо него использовать параметр «MyParam2», он выберет правильный параметр, учитывая значение MyParam2. Раньше не было, когда имя параметра было MyParam.

Кто-нибудь еще сталкивался с этим? Это ошибка в MVC 3 или это плохая реализация с моей стороны?

Ответы [ 3 ]

1 голос
/ 23 февраля 2012

Это хорошо известная проблема.Это не ошибка, потому что это дизайн.Это скорее ограничение дизайна.

С этим ничего не поделаешь, просто переименуйте свой параметр или переименуйте свойство.

1 голос
/ 23 февраля 2012

Как насчет упомянутого URL,

http://mydomain.com/path/page?myparam=myvalue

В URL-адресе есть строка запроса с ключом "myparam", поскольку имя совпадает с именем свойства, и когда URL-адрес вызываетсядобавит значение ModelState к «myparam».

ModelState [«myparam»] будет «myvalue».

Поэтому, когда страница загружена, выпадающий список выберет «myvalue» из выпадающего списка..

0 голосов
/ 23 февраля 2012

Это не слишком хороший ответ, кроме как сказать, что я столкнулся с тем же поведением в немного другой ситуации.

В моем случае я вызывал дочернее действие из родительского действия и передавал модель представления, специфичную для дочернего действия, которая разделяла некоторые из тех же имен свойств с ViewData родителя.Когда было выполнено частичное представление моего дочернего действия, в нем отображались данные представления от родительского контроллера, а не то, что было в модели представления, которую я передавал дочернему действию.В этой ситуации было похоже, что данные представления родительского действия загрязняли мою дочернюю модель представления действия, когда свойства обоих имели одинаковые имена.

Таким образом, похоже, что привязка иногда путается относительно того, какое значение связывать при столкновении имен.В моем случае я просто переименовал свойства в дочерней модели представления, чтобы предотвратить это столкновение, но я выдернул свои волосы, выясняя, почему там было неправильное значение.

Если у кого-то есть реальный ответ относительно того, почему этобывает, я тоже хотел бы знать.Для меня это выглядит как обязательная ошибка, но, возможно, здесь есть намерение.

...