1

私は自分自身を少し混乱させてしまい、それから抜け出すのに苦労しています. 次のドメインモデルがあります(簡潔にするために縮小されています):

public class Questionnaire
{
    public int Id { get; set; }
    public IList<QuestionGroup> QuestionGroups { get; set; }
}

public class QuestionGroup
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Order { get; set; }
    public IList<Question> Questions { get; set; }
}

public class Question
{
    public int Id { get; set; }
    public string Text { get; set; }
    public string Type { get; set; }
    public string Headings { get; set; }
    public IList<Answer> Answers { get; set; }
}

public class Answer
{
    public int Id { get; set; }
    public string Text { get; set; } 
}

今、私Questionnaireが自分のビューで自分をレンダリングしているとき、それぞれにEditorTemplatesを使用しています . レンダリングするとき、プロパティ (RadioButtonList や TextArea など) と各プロパティ (コンマ区切りの文字列) を見ています。たとえば、次のように初期化されているとしましょう。QuestionGroupQuestionQuestionTypeHeadingQuestion

var question = new Question() {
    Text = "My Question Text",
    Type = "RadioButtonList",
    Headings = "Very Difficult,2,3,4,Very Easy"
};

次に、次のようになります。

ここに画像の説明を入力

私のEditorTemplateで次のように生成されます。

@foreach (var heading in Model.Headings.Split(','))
{
    <li>
        <div>
            <strong>@heading</strong>
            @Html.RadioButton(Model.Id.ToString(), heading)
        </div>
    </li>
}

このマークアップは次のようになります。

<ul>
    <li>
        <div>
            <strong>Very Difficult</strong>
            <input id="group_question_1" name="group.question.1" type="radio" value="Very Difficult" />
        </div>
    </li>
    <li>
        <div>
            <strong>2</strong>
            <input id="group_question_1" name="group.question.1" type="radio" value="2" />
        </div>
    </li>
    <li>
        <div>
            <strong>3</strong>
            <input id="group_question_1" name="group.question.1" type="radio" value="3" />
        </div>
    </li>
    <li>
        <div>
            <strong>4</strong>
            <input id="group_question_1" name="group.question.1" type="radio" value="4" />
        </div>
    </li>
    <li>
        <div>
            <strong>Very Easy</strong>
            <input id="group_question_1" name="group.question.1" type="radio" value="Very Easy" />
        </div>
    </li>
</ul>

カスタム モデル バインダーを作成しましたが、ここで少し行き詰まっています。私の実際の質問は次のとおりです。

  1. ビュー内のドメイン モデルに基づいて選択した値を保持するにはどうすればよいですか?
  2. 私はこのようなものに正しいアプローチを使用していますか、それとも私は道を外れていますか?

私はまだ MVC の学習段階にあることを認めなければならないので、自分の試みから少し盲目的になる可能性があります。どんな助けでもいつも感謝しています!

4

2 に答える 2

1

私が尋ねた別の質問で述べたように、カスタムモデルバインダーを使用してこれを解決することができました: https://stackoverflow.com/a/12318484/961328

于 2012-09-10T08:11:15.193 に答える
1

db エンティティとビューの間にビューモデルが必要です。あなたがexのために追加したい場合。検証では、db クラスで検証属性を使用するとかなり面倒になります。長期的には、ビューモデルは時間を節約します。

于 2012-08-31T13:22:45.237 に答える