Asp.net Mvc Как использовать DropDownListFor без установки выбранного в контроллере - PullRequest
1 голос
/ 19 февраля 2012

У меня есть родительская модель со списком дочерних моделей. В представлении я отрисовываю детей, используя шаблон как

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

В шаблоне дочерней модели у меня есть этот выпадающий список

@Html.DropDownListFor(model => model.Quantity, 
      new SelectList(new[] { 1,2,3,4,5,6,7,8,9,10 }))

но я не знаю, как установить выбранный пункт.

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

Если я не в контроллере, чтобы сделать что-то вроде

ViewBag["Child_1_SelectedItem"] = children[0].Quantity 
ViewBag["Child_2_SelectedItem"] = children[1].Quantity 

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

Ответы [ 2 ]

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

Существует еще одна перегрузка в конструкторе SelectList, который принимает выбранный элемент, так что вы почти у цели с вашим вторым фрагментом кода

int[] array = { 1, 2, 3 };
var list = new SelectList(array, 1);

Учитывая это, вы могли бы изменить свой код на:

@Html.DropDownListFor(model => model.Quantity, 
  new SelectList(new[] { 1,2,3,4,5,6,7,8,9,10 }, model.Quantity))

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

@Html.DropDownListFor(model => model.Id, 
  new SelectList(new[] { 1,2,3,4,5,6,7,8,9,10 }, Model.Id))

Или, используя простую переменную:

@{
    int selectedQuantity = Model.Quantity;
}

@Html.DropDownListFor(model => model.Id, 
  new SelectList(new[] { 1,2,3,4,5,6,7,8,9,10 }, selectedQuantity))
1 голос
/ 19 февраля 2012

Вы обычно делаете:

var quantities =  new List<SelectListItem>(new[] {
        new SelectListItem { 
            Selected = true, 
            Text="1",
            Value="1"
        },
        new SelectListItem { 
            Text="2",
            Value="2"
        }
        ....

А потом:

@Html.DropDownListFor(model => model.Quantity, quantities)

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

var q = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<SelectListItem> list = new List<SelectListItem>();
foreach (var item in q)
{
    if(children[item].Quantity)// dunno what is in this property...
    {//if Quantity is bool you could directly set Selected then..
      list.Add(new SelectListItem {  Selected = true, Text = item.ToString() });
    } else {
      list.Add(new SelectListItem { Text = item.ToString() });
    }
}

А затем передайте свой list вниз к виду.ИЛИ вы можете просто сделать это в @{..} кодовом блоке в самом представлении.

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