2015-03-12 6 views
0

Я пытаюсь установить "Selected Item" в моем Html.DropDownListForВыбранный элемент для SelectListItem

Мой контроллер выглядит следующим образом:

HttpCookie cookie = Request.Cookies["MyCookie"]; 
if (cookie != null) 
{ 
    model.cookieValues = new cookieValues(); 
    model.cookieValues.formSelected = cookie.Values.Get("FormSelected"); 
} 

model.formGroups = new List<SIMSClient.FormGroup>(); 
model.formGroups = SIMSClient.ClientFunctions.GetFormGroups(GlobalVariables.networkstuff, GlobalVariables.testAuth); 

На мой взгляд, у меня есть рабочий DropDownListFor:

@Html.DropDownListFor(x => x.formGroups, Model.formGroups.Select(d => new SelectListItem { Text = d.Description, Value = d.ID}), new { @id = "ddlFormGroups", @class = "form-control" }) 

, но я не могу работать, как установить выбранное значение model.cookieValues.formSelected

Как я могу это сделать, пожалуйста?

ответ

1

Ваша недвижимость formGroups представляет собой набор сложных объектов (List<SIMSClient.FormGroup>) - вы не можете привязать выпадающий список к коллекции (a <select> связывается и возвращает одно значение). Ваша модель должна свойство связываться, например

public int SelectedID { get; set; } // assumes the ID property of FormGroup is int 

Тогда в представлении

@Html.DropDownListFor(x => x.SelectedID, Model.formGroups.Select(d => new SelectListItem ....) 

Если значение SelectedID соответствует одному из ID значений FormGroup, то этот вариант будет выбран в представление, когда страница сначала отображается. Когда вы отправляете сообщение назад, значение SelectedID будет значением выбранного параметра.

1

Когда вы делаете сопоставление с SelectListItem, вы должны установить свойство Selected в true.

Предполагая, что ваш model.cookieValues.formSelected содержит ID группы, вы можете проверить, соответствует ли какой-либо элемент из массива условию model.cookieValues.formSelected == group.ID.

@{ 
     groups = Model.formGroups.Select(d => 
       new SelectListItem 
       { 
        Text = d.Description, 
        Value = d.ID, 
        Selected = (model.cookieValues.formSelected == d.ID) 
       }); 
} 

@Html.DropDownListFor(x => x.GroupId , groups, new { @id = "ddlFormGroups", @class = "form-control" }) 

Пожалуйста, обратите внимание, что на вашем DropDownListFor у вас есть x => x.formGroups это неправильно, потому что это список групп. У вас должно быть свойство, в котором выбрано Id (значение), которое должно быть связано.

Пример имеющий свойство с именем GroupId, вы можете сделать это string (потому что SelectListItem свойство Value является строка) и преобразовать его на сервере, как вы хотите.

+0

Большое спасибо - точно следили за вашим кодом. Когда я отлаживаю, я вижу «Selected = true» на правильном значении, но когда он отображает html, ничто не помечено как «выбрано» ... странно. –

+0

@TrevorDaniel Вы пробовали Ctrl + F5, возможно, ваш браузер не использует новые изменения? иногда бывает со мной – adricadar

+0

ctrl + f5 не имеет значения. также не меняли браузер на Chrome и Firefox ... Я не понимаю, как значение правильного listitem определенно верно –

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