MVC - установить выбранное значение SelectList внутри ViewModel

Как я могу установить свойство selectedvalue для SelectList после его создания без selectedvalue.

Контроллер

var _walkInnVM = new WalkInnVM
{        
    ProspectHandledEmpList = new SelectList(_db.Employees
        .AsEnumerable()
        .Where(e => e.Id == Int32.Parse(Session["LoggedUserId"].ToString()))
        .ToList(), "Id", "Name")       
};

HTML

@Html.DropDownListFor(m => m.ProspectHandledEmpID,
    Model.ProspectHandledEmpList, "", 
    new { @class = "form-control select2 ", @id = "ddlProspectHandled" })

person ksg    schedule 26.11.2015    source источник
comment
Вы хотите установить значение по умолчанию для списка выбора?   -  person Vini    schedule 26.11.2015
comment
Просто установите значение ProspectHandledEmpID - так работает привязка модели. И установка свойства Selected в любом случае бессмысленна, так как она будет проигнорирована. Обратите внимание, что вам не нужен .ToList() - это просто ненужные накладные расходы.   -  person    schedule 26.11.2015
comment
@StephenMuecke Небольшой пример будет полезен ..   -  person ksg    schedule 26.11.2015
comment
@ViniVasundharan Ага .. Это было то, что я искал ..   -  person ksg    schedule 26.11.2015
comment
В методе GET просто установите значение ProspectHandledEmpID, чтобы оно соответствовало одному из значений Employee.Id, прежде чем передавать модель в представление, и оно будет выбрано - _walkInnVM.ProspectHandledEmpID = #; return View(_walkInnVM);   -  person    schedule 26.11.2015
comment
ProspectHandledEmpList = new SelectList(_db.Employees .AsEnumerable() .Where(e => e.Id == Int32.Parse(Session["LoggedUserId"].ToString())) .ToList(), "Id", "Name", default value) , это то, что вы искали?   -  person Vini    schedule 26.11.2015
comment
@StephenMuecke: я сделал это на основе вашего предложения по моему вопросу, где я хотел передать выбранное значение в раскрывающийся список   -  person Vini    schedule 26.11.2015
comment
@ViniVasundharan, Установка параметра selectedValue просто игнорируется. Это значение свойства (ProspectHandledEmpID), которое определяет, что выбрано.   -  person    schedule 26.11.2015
comment
В ПОРЯДКЕ. Я думал, что OP хочет передать значение в представление, где выбранное значение появляется в верхней части раскрывающегося списка. Например: если у меня есть представление редактирования, я бы передал уже существующее значение в представление, чтобы раскрывающийся список содержал это конкретное значение. Потому что я задал этот вопрос и хотел отключить раскрывающийся список с переданным выбранным значением. Я думал, OP хочет того же. моя вина :(   -  person Vini    schedule 26.11.2015
comment
@ViniVasundharan, Да, и способ сделать это - установить значение свойства, к которому привязан раскрывающийся список (а не путем установки последнего параметра SelectList, который просто игнорируется)   -  person    schedule 26.11.2015
comment
@StephenMuecke: Хорошо. Я понимаю. Но ViewBag.TechnicalCharacteristicID = new SelectList(db.TechnicalCharacteristic, "TechnicalCharacteristicID", "TCName",15), действительно работает. я джуз пробовал сейчас. У меня нет значения, привязанного к TechnicalCharacteristic в моей модели, а только в списке выбора. Я все еще упускаю вашу точку зрения? И я надеюсь, что ОП нашел свой ответ. Так что давайте не будем обсуждать. :)   -  person Vini    schedule 26.11.2015
comment
@ViniVasundharan, если вы связали это со свойством со значением (скажем) 10, тогда будет выбран вариант с value="10", а не с value="15" (он просто игнорируется при привязке к свойству модели)   -  person    schedule 26.11.2015
comment
@ViniVasundharan Я думаю, что ваш ответ был правильным в случае использования ViewBag, где я его не использую. Извините, если я ошибаюсь ..   -  person ksg    schedule 26.11.2015
comment
В ПОРЯДКЕ. Теперь я понимаю. Вы говорите о привязке значения к модели, когда оно передается обратно в контроллер.   -  person Vini    schedule 26.11.2015
comment
@ksg: пожалуйста, следуйте инструкциям Стивена :) Надеюсь, вы нашли ответ ..   -  person Vini    schedule 26.11.2015
comment
@ViniVasundharan, да, Стив был прав;)   -  person ksg    schedule 26.11.2015
comment
@StephenMuecke Если возможно, просмотрите этот этот вопрос   -  person ksg    schedule 26.11.2015


Ответы (1)


Вам необходимо установить значение ProspectHandledEmpID в модели, прежде чем передавать его в представление

var _walkInnVM = new WalkInnVM
{
    ProspectHandledEmpID = someValue, // add this
    ProspectHandledEmpList = new SelectList(_db.Employees.AsEnumerable()
      .Where(e => e.Id == Int32.Parse(Session["LoggedUserId"].ToString())), "Id", "Name")       
};

Если db.Employees содержит элементы со значениями Id от 1 до 10 и вы устанавливаете значение ProspectHandledEmpID = 3, то при первом создании представления будет выбран 3-й вариант.

person Community    schedule 27.11.2015
comment
Если возможно, просмотрите этот вопрос - person ksg; 04.12.2015