MVC3 SelectedValue - PullRequest
       6

MVC3 SelectedValue

0 голосов
/ 14 сентября 2011

В моей модели:

public SelectList QuestionGroupSelectList { get; set; }

------
List<QuestionGroup> questionGroupList = questionGroupRepository.GetQuestionGroup_BySurveyId(survey.Id);

Dictionary<int, string> questionGroupDictionary = questionGroupList.ToDictionary(l => l.Id, l => l.Name);

QuestionGroupSelectList = new SelectList(questionGroupDictionary, "key", "value", questionGroupId);





---------------------------------------
In view:
@Html.DropDownList("QuestionGroupSelectList", Model.QuestionGroupSelectList, "Choose Here")

При отладке я получаю 2 элемента в QuestionGroupSelectList (один с идентификатором 30 и один с идентификатором 35), и он говорит, что selectedValue равно 35 (questionGroupId = 35)

Но выбранное значение не работает в представлении, есть идеи?

Заранее спасибо!

1 Ответ

1 голос
/ 14 сентября 2011

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

public class MyViewModel
{
    public int QuestionGroupId { get; set; }
    public SelectList QuestionGroupSelectList { get; set; }
}

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

public ActionResult Foo()
{ 
    // This collection could come from anywhere 
    // normally you will query a repository here to fetch those values
    var values = new[] 
    {
        new { Key = "1", Value = "item 1" },
        new { Key = "2", Value = "item 2" },
        new { Key = "3", Value = "item 3" },
    }

    var model = new MyViewModel
    {
        // preselect the second value
        QuestionGroupId = 2,
        QuestionGroupSelectList = new SelectList(values, "Key", "Value")
    }
    return View(model);
}

и, наконец, на ваш взгляд:

@model MyViewModel

@Html.DropDownListFor(
    x => x.QuestionGroupId, 
    Model.QuestionGroupSelectList, 
    "Choose Here"
)
...