DropDownListFor не устанавливает выбранное значение - PullRequest
2 голосов
/ 09 сентября 2010

У меня есть представление, которое отображает выпадающий список с помощью помощника HTML DropDownListFor

<%: Html.DropDownListFor(Function(model) model.Manufacturer, New SelectList(Model.ManufacturerList, Model.Manufacturer))%>

Мой контроллер передает ViewModel, содержащую производителя и список производителей

Function Search(ByVal itemSrch As ItemSearchViewModel) As ActionResult

     'some code mapping and model code'

     Return View(itemSrch)

End Function

Моя ViewModel не является чем-то сумасшедшим, просто заполняет ManufacturerList списком строковых значений, а затем свойство Manufacturer - просто строковое значение, содержащее выбранное значение из выпадающего списка.

Public Property Manufacturer As String

Public Property ManufacturerList() As List(Of String)

У меня естьпроблема с представлением, устанавливающим выбранное значение в раскрывающемся списке, если мы перезагружаем представление поиска.Я проверил модель представления (ItemSearchViewModel), когда она входит в функцию поиска, и производитель заполняется правильным выбранным значением и успешно передает это значение обратно в представление поиска.В какой-то момент данные, передаваемые в представление, похоже, не заполняют выбранное значение, и мне было интересно, есть ли у кого-нибудь идеи о том, почему это происходит и что я могу сделать, чтобы это исправить.

Спасибо

Ответы [ 2 ]

2 голосов
/ 14 сентября 2010

Не получил много ответов на этот вопрос, поэтому начал копаться в том, как я мог бы это легко исправитьТакже в моем исследовании это казалось общей проблемой для многих людей с DropDownListFor HTML Helper.Я подумал, что должен быть способ заставить это работать, так как я знал, что выбранное свойство значения из моей ViewModel фактически передавалось в View.Итак, на помощь пришли javascript и jQuery, в итоге я попытался установить выбранное значение с помощью функции jQuery .ready и смог успешно заставить это работать.Итак, вот мое исправление jQuery:

$(document).ready(function() {

    $("#Manufacturer").val("<%: Model.Manufacturer %>");

});

Для облегчения этого я использовал полный синтаксис .ready, или вы можете просто использовать $ (function () {'code'});

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

document.getElementByID("Manufacturer").Items.FindByValue("<%: Model.Manufacturer %>").Selected = true;

Если вы используете простой вызов javascript, убедитесь, чтовызывайте его, когда страница завершит загрузку данных в раскрывающийся список.

В любом случае все, что делает этот код, - это устанавливает выбранное значение в раскрывающемся списке на стороне клиента из переданного значения «Производитель» из модели..

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

Спасибо,

1 голос
/ 05 октября 2010

Сегодня я сделал подобное быстрое исправление в JQuery, чтобы исправить это поведение:

$(document).ready(function() {
$(".wrapper<%: Model.Language %> option[value=<%: Model.Language %>]").attr("selected","true");
});

Хотя я мог бы поделиться этим с другими при необходимости.

Я все еще хотел бы увидеть реальный патч к этой проблеме, так что, похоже, многие люди по-другому, возможно, с помощью метода расширения уже существующего метода DropDownListFor Html.helper.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...