Элемент управления не получает выбранное значение из DropDownListFor - PullRequest
0 голосов
/ 19 октября 2011

Я получил следующую модель:

public class ViewBloqueioNotaFiscal
{

   public ViewComboStatus ComboStatus = new ViewComboStatus();

   public class ViewComboStatus
   {
      public int? IdStatusSelecionado { get; set; }
      public IEnumerable<SelectListItem> ComboStatus { get; set; }
   }
}

Следующий метод контроллера:

public ViewBloqueioNotaFiscal.ViewComboStatus geraComboStatus(int? statusSelecionado)
{
   ViewBloqueioNotaFiscal.ViewComboStatus combo = new ViewBloqueioNotaFiscal.ViewComboStatus
   {
       IdStatusSelecionado = statusSelecionado,     
       ComboStatus = new[]{
                     new SelectListItem { Value = 1, Text = "Op1"},
                     new SelectListItem { Value = 2, Text = "Op2"}
        }
   };
   return combo;
}

И мой aspx похож на:

<%: Html.DropDownListFor(x => x.ComboStatus.IdStatusSelecionado, Model.ComboStatus.ComboStatus) %>

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

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

спасибо за помощь!

1 Ответ

2 голосов
/ 19 октября 2011

Вы не привязаны к правильному свойству модели представления.Вы привязываетесь к некоторому сложному объекту (ComboStatus), который не имеет смысла.

Вы должны связать выпадающий список со свойством IdStatusSelecionado:

<%: Html.DropDownListFor(
    x => x.ComboStatus.IdStatusSelecionado, 
    Model.ComboStatus.ComboStatus
) %>

Для строго типизированного помощника DropDownListFor требуется как минимум 2 вещи в модели представления:

  1. Скалярное свойство (int, decimal, string, ...), которое будет использоваться для привязки к
  2. Коллекции пар значение / текст.

Если коллекцияиз пары значение / текст содержит элемент, значение которого равно скалярному свойству, которое вы использовали в качестве первого аргумента, этот элемент будет предварительно выбран.Например, если вы хотите предварительно выбрать второй элемент в вашем примере, вы должны установить IdStatusSelecionado=2 для вашей модели представления.

Примечание: Model.ComboStatus.ComboStatus выглядит ужасно.Пожалуйста, переименуйте.

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