自定义EditorTemplate的模型绑定

时间:2012-05-17 18:44:21

标签: asp.net-mvc asp.net-mvc-3 model-binding mvc-editor-templates

我试图提供一个单选按钮列表,从MVC 3模型中的一小组字符串中选择一个选项。我正在研究调查中的问题编辑模板。

到目前为止,我已经关注Brad Christie's advice,这使我能够正确渲染视图。这是相关的代码:

模型 - Question.cs

(注意,这实际上是模型优先的EF实体,但我认为不重要)

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

查看 - 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>

查看 - 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>
}

虽然视图会创建正确的HTML,但当我加载调查的编辑器视图时,在页面加载时不会预先选择与其问题类型对应的单选按钮。我假设这与模型绑定有关吗?

如何根据数据库中存在的选择预先选择正确的单选按钮?如果它很重要,我使用模型优先实体框架4作为我的持久层。

1 个答案:

答案 0 :(得分:1)

基于RadioButtonFor not selecting value in editor templates

您的模型绑定很好,问题只是那个

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

对应一个空名称,RadioButtonFor从不检查空名称的单选按钮。

你应该能够做到

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