DropdownListFor не выбирает (кто бы догадался?) - PullRequest
1 голос
/ 17 мая 2011

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

public class StateViewModel {
    public string Name { get; set; }
    public string Abbr { get; set; }
}

public class ChangeAddressViewModel {
    //edited down to what's needed
    public StateViewModel StateViewModel { get; set; }
    public IEnumerable<StateViewModel> StateViewModels { get; set; }
}

Что я пробовал:

@Html.DropDownListFor(model => model.StateViewModel
    , Model.StateViewModels.Select(x => new SelectListItem {
         Text = x.Name,
         Value = x.Abbr,   
         Selected = x.Abbr == Model.StateViewModel.Abbr
         })
    , @Resource.SelectState)

//i've stepped through the lambda above and the expression 
//x.Abbr == Model.StateViewModel.Abbr 
//did evaluate to true for one of the iterations

@Html.DropDownListFor(model => model.StateViewModel
    , new SelectList(Model.StateViewModels
    , "Abbr"
    , "Name"
    , Model.StateViewModel.Abbr)
    , @Resource.SelectState)

1 Ответ

0 голосов
/ 18 мая 2011

Я вижу, что вы указываете new SelectList:

 @Html.DropDownListFor(model => model.StateViewModel
    , new SelectList(Model.StateViewModels
    , "Abbr"
    , "Name"
    , Model.StateViewModel.Abbr)
    , @Resource.SelectState)

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

Попробуйте установить его на:

@Html.DropDownListFor(model => model.SelectedStateID,
                        Model.States
                        , new { id = "ddlStates" })

И в вашей Controller / ViewModel заполните SelectList, как показано ниже. Я написал свой собственный пример, как это было проще.ниже приведен код для контроллера в ActionResult:

  //Retrieve the list via LINQ/however and also the SelectedStateID
  var states = ....

   var statesList = new SelectList(states, "Abbr", "Name", SelectedStateID);


   var viewModel = new StateViewModel
    {
        //assign it to the corresponding ViewModel property
        States = statesList ,
                ...
                ...
    };

    return View( viewModel);  

Ваша ViewModel будет выглядеть так:

 private List<SelectListItem> _states = new List<SelectListItem>();
    public List<SelectListItem> States 
    {
        get
        {
            return (_states );
        }

        set
        {
            _states = value;
        }
    }

    public Guid SelectedStateID
    {
        get;
        set;
    }

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

Если это так, попробуйте следующее:

 @Html.DropDownListFor(model => model.StateViewModel
    , new SelectList(Model.StateViewModels
                    , "Abbr"
                    , "Name")
, Model.StateViewModel.Abbr
, @Resource.SelectState)

Я думаю, что ваша заключительная скобкав неправильном положении!

...