/ / Modelowanie dla niestandardowych szablonów EditorTemplate - asp.net-mvc, asp.net-mvc-3, model-binding, mvc-editor-templates

Wiązanie modelu dla niestandardowych szablonów EditorTemplate - asp.net-mvc, asp.net-mvc-3, model-binding, mvc-editor-templates

Próbuję dostarczyć listę przycisków radiowych, aby wybrać opcję z małego zestawu ciągów w modelu MVC 3. Nad którym pracuję, to szablon edytora do pytania w ankiecie.

Do tej pory śledziłem Rada Brada Christie, co pozwoliło mi poprawnie renderować widok. Oto odpowiedni kod:

Model - Question.cs

(Uwaga, to jest faktycznie modelowy pierwszy podmiot EF, ale nie wierzę, że to ma znaczenie)

public class Question {
// snip unimportant properties
public string QuestionType { get; set; }
}

Zobacz - Question.cshtml

// snip unimportant view code

<div class="control-group">
@Html.LabelFor(model => model.QuestionType, "Question Type")
<div class="controls">
@Html.EditorFor(model => model.QuestionType, "QuestionType")
@Html.ValidationMessageFor(model => model.QuestionType)
</div>
</div>

Zobacz - QuestionType.cshtml

@model System.String

@{
var questionTypes = new String[] { "PickOne", "PickMany", "OpenEnded" };
var typesMap = new Dictionary<String, String> {
{ "PickOne", "Pick a single answer" },
{ "PickMany", "Pick several answers" },
{ "OpenEnded", "Open-ended answer" }
};
}

@foreach (var questionType in questionTypes) {
<label class="radio">
@Html.RadioButtonFor(model => model, questionType)
@typesMap[questionType]
</label>
}

Chociaż widok tworzy prawidłowy kod HTML, kiedy jazaładuj widok edytora do ankiety, przycisk radiowy odpowiadający jego typowi pytania nie jest wstępnie wybrany po wczytaniu strony. Zakładam, że ma to związek z wiązaniem modelu?

Jak mogę wstępnie wybrać prawidłowy przycisk radiowy na podstawie wyboru istniejącego w bazie danych? W przypadku, gdy jest to ważne, używam modelu Entity Framework 4 jako mojej warstwy trwałości.

Odpowiedzi:

1 dla odpowiedzi № 1

Oparte na RadioButton Nie wybiera wartości w szablonach edytora

Wiązanie twojego modelu jest w porządku, problem jest właśnie taki

@Html.RadioButtonFor(model => model, questionType)

odpowiada pustej nazwie, i RadioButtonFor nigdy nie sprawdza przycisków radiowych z pustymi nazwami.

Powinieneś być w stanie to zrobić

@Html.RadioButton("", questionType, questionType == Model)