2014-02-06 2 views
1

Я просмотрел множество сообщений и несколько примеров о том, как создать раскрывающийся список в MVC и Razor, не так сильно, как выяснить мою проблему.Выпадающий список MVC не отображает сохраненное значение

В принципе у меня есть эта строка кода, который создает мой выпадающий список

@Html.DropDownListFor(model => model.MarketSegmentID, 
           new SelectList(""), 
           new { @class = "dropdownList"}) 

Затем с JQuery заливаю выпадающего списка со значениями из контроллера

Тогда я отправляю моя форма и выбранное значение в выпадающее меню происходит правильно.

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

Для удовольствия я добавил эту строку кода, и она показала мое сохраненное значение.

@Html.EditorFor(model => model.MarketSegmentID) 

Любые идеи, что я делаю неправильно?

+0

Q. Почему вы Наполнение выбрать список в jQuer y вместо того, чтобы с помощью сопоставления 'ViewBag.MarketSegmentId' в контроллере? –

+0

... или с помощью ViewModel? –

+0

@ André Figueiredo: У него есть ViewModel, вы имеете в виду продлить его? Нет необходимости в DropDownLists, поскольку они уже подключены для просмотра в ViewBag (см. Ответ ниже). –

ответ

0

Если у вас нет реальной необходимости для заполнения стороны SelectList клиента, вы лучше положить ваши SelectList ценностей прямо в ViewBag.MarketSegmentId собственности в контроллере и использование:

@Html.DropDownListFor(model => model.MarketSegmentID) 

или даже просто

@Html.DropDownList("MarketSegmentID") 

в контроллере вы будете иметь что-то вроде этого (варьируются в соответствии со своими собственными данными):

ViewBag.MarketSegmentID = new SelectList(someDataList, "ValueProperty", "NameProperty"); 

someDataList может быть любой коллекцией (например. таблицу базы данных, список и т. д.). «ValueProperty» - это имя свойства в ваших данных, которое содержит значение, которое вы хотите сохранить (часто значение int). «NameProperty» - это имя свойства в ваших данных, которое содержит текст, который вы хотите отображать для каждого элемента.

Предполагая, что вы хотите простой список целых чисел, генерируемых в последовательности, вы можете добавить их в цикле, как это:

List<int> ints = new List<int>(); 
for (int i = 0; i < 100; i++) 
{ 
    ints.Add(i); 
} 
ViewBag.MarketSegmentID = new SelectList(ints); 

Если нет имен свойств не указаны в SelectList конструктору он будет просто использовать элементы в коллекции для отображения и значений.

MVC автоматически ищет SelectList в собственности ViewBag с таким же именем, как и у модели. например Model.MarketSegmentID предполагается выбранное значение и ViewBag.MarketSegmentID предполагается провести соответствие SelectList

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

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

+0

Тип данных: int – user3036753

+0

@ user3036753: Вы имеете в виду, что это простой список целых значений, например 0-100 и т. д.? –

+0

Его идентификатор, поэтому он может быть 1-10000., Данные выглядят следующим образом: Adhesive-1, B & C-2, Coatings-3 и т. Д. – user3036753

0

Это, как я использую, чтобы сделать:

Razor:

@Html.DropDownListFor(m => m.MarketSegmentID , Model.GetMarketSegmentList, new { @class = "form-control" }) 

ViewModel:

public int? MarketSegmentID { get; set; } 
public List<SelectListItem> GetMarketSegmentList { get; set; } 

Контроллер:

var vm = new ViewModelWhatever(); 
[..] 
vm.GetMarketSegmentList = GetMarketSegmentList() 
          .ToList() 
          .Select(x => new SelectListItem() 
          { 
           Value = x.MarketSegmentID.ToString(), 
           Text = x.Name 
          }) 
          .ToList(); 
+0

Я не говорил, что вы не можете этого сделать, я просто сказал, что MVC предоставляет более простой способ, встроенный, с помощью записи ViewBag с тем же именем, что и свойство для Selectlist. Затем вы можете продолжать использовать модель данных вместо того, чтобы вводить дополнительную ViewModel только для добавления SelectList. –

Смежные вопросы