1

私の ASP.NET WebForms の経験では、これが初めての MVC プロジェクトです。
これは、メカニズムが許すとは思わない問題ですが、間違っている可能性があります。a の中に a
を持つことはそれほど簡単ではありません。 まず第一に、ドロップダウンは私が渡した値を選択しません ( ) -- 下の画像ですべて表示されていることに注意してください。これは、ロードした正しい値が選択されていないためです。 次に、それらはすべて同じフォーム フィールド名になるため、コントローラーはどのようにしてそれらを対応する List<> に戻すことができるでしょうか? これを1時間見て、同様の例を検索しましたが、見つかりません。 ハードコードされたハックや回避策ではない良い解決策は何ですか?DropDownListFor@foreach
m => question.AnswerNo Answer


モデル:

public List<SelectListItem> PossibleAnswers
{
    get
    {
    return new List<SelectListItem>() 
    { 
        new SelectListItem() { Text = "No Answer", Value = "0" }, 
        new SelectListItem() { Text = "Very Bad", Value = "1" }, 
        new SelectListItem() { Text = "Bad", Value = "2" }, 
        new SelectListItem() { Text = "Average", Value = "3" }, 
        new SelectListItem() { Text = "Good", Value = "4" },
        new SelectListItem() { Text = "Very Good", Value = "5" } 
    };
    }
}
public enum SurveyAnswer
{
    NoAnswer,
    VeryBad,
    Bad,
    Average,
    Good,
    VeryGood
}
public class SurveyQuestionClass
{
    public int ID { get; set; }
    public string Question { get; set; }
    public SurveyAnswer Answer { get; set; }
}
public List<SurveyQuestionClass> QuestionsAnswers { get; set; }

意見:

@foreach (var question in Model.QuestionsAnswers)
{
    <tr>
        <td>
            @Html.DropDownListFor(m => question.Answer, Model.PossibleAnswers, new { style = "font-size: small;" })
        </td>
        <td>
            @Html.Raw(question.Question)
        </td>
    </tr>
}

次のようになります。

ここに画像の説明を入力

4

1 に答える 1

1

エディターテンプレートを使用する必要があります

これは次のように適用できます。

可能な回答を SurveyQuestClass に移動します。次に、次のように editortemplate を指定できます。

@model SurveyQuestionClass

<tr>
    <td>
        @Html.DropDownListFor(m => m.Answer, Model.PossibleAnswers, new { style = "font-size: small;" })
    </td>
    <td>
        @Html.Raw(Model.Question)
    </td>
</tr>

Editortemplates は、ビュー フォルダーの EditorTemplates フォルダーに配置する必要がある部分ビューです。したがって、これがホーム ビューに当てはまる場合、テンプレートはビュー > ホーム > EditorTemplates に配置する必要があります。

Editortemplates は、type.cshtml という名前にする必要があります。あなたの場合:SurveyQuestionClass.cshtml

あなたの見解では、これは単純に次のようになります。

@Html.EditorFor(m => m.QuestionsAnswers)

モデルをコントローラー関数に戻すと、すべての質問と回答が QuestionsAnswers リストにバインドされます。リストを繰り返し処理し、SurveyQuestionClass.Answer プロパティを読み取ると、質問の回答が得られます。

于 2013-09-14T07:18:21.557 に答える