Установите значение по умолчанию в раскрывающемся списке по умолчанию на основе окна просмотра

У меня есть раскрывающийся список, который перезагружает страницу при изменении выбранного значения. Это работает и отображается так, как ожидалось. Единственная проблема заключается в том, что выпадающий список возвращается к значению по умолчанию. Как я могу изменить значение по умолчанию, чтобы оно соответствовало ViewBag.Value?

 @Html.DropDownListFor(model => model.LevelId,
                            (
                                from choice in
                                    (from p in Model.Defaults
                                     group p by new { p.LevelId, p.LevelDescription } into c
                                     select new { c.Key.LevelId, c.Key.LevelDescription })
                                select new SelectListItem
                                           {
                                               Text = choice.LevelDescription,
                                               Value = choice.LevelId.ToString(),
                                               Selected = false
                                           }))

jscript

$("#LevelId").change(function() {

        var clientId = @Model.ClientId;
        var compareDate = $("#EffectiveDate").val();
        var level = $(this).val();
        var params = $.param({ clientId: clientId, compareDate: compareDate, level : level });
        var link = '@Url.Action("Create", "Choices")'; //"\\Choices\\RefreshView";
        var url = link + "?" + params;
        document.location = url;
    });

контроллер устанавливает ViewBag.Level на основе параметра, переданного в


person Antarr Byrd    schedule 18.01.2012    source источник


Ответы (1)


Вы можете добавить свойство в свою модель представления, которое будет IEnumerable<SelectListItem>, которое вы будете инициализировать в своем контроллере. Затем просто установите для свойства LevelId значение, которое вы хотели бы предварительно выбрать:

public ActionResult Foo(string level)
{
    var model = new MyViewModel();
    var values = from choice in
        (from p in Model.Defaults
         group p by new { p.LevelId, p.LevelDescription } into c
         select new { c.Key.LevelId, c.Key.LevelDescription })
         select new {
             Text = choice.LevelDescription,
             Value = choice.LevelId.ToString()
         }
    );
    model.Items = new SelectList(values, "Text", "Value");
    model.LevelId = level;
    return View(model);
}

а затем, на ваш взгляд:

@Html.DropDownListFor(model => model.LevelId, Model.Items)
person Darin Dimitrov    schedule 18.01.2012
comment
Я получаю эту ошибку для model.items = new SelectList(values....) Error 7 Невозможно неявно преобразовать тип System.Web.Mvc.SelectList в System.Collections.Generic.IEnumerable‹System.Web.WebPages. Html.SelectListItem›». - person Antarr Byrd; 18.01.2012
comment
@atbyrd, вы должны использовать IEnumerable<System.Web.Mvc.SelectListItem> вместо IEnumerable<System.Web.WebPages.Html.SelectListItem>. Кажется, вы выбрали не тот класс SelectListItem :-) - person Darin Dimitrov; 18.01.2012
comment
да разобрался. Спасибо за вашу помощь, теперь он отлично работает! - person Antarr Byrd; 18.01.2012