1

意見

@model Survey.Models.TakeSurveyViewModel
@{    
    Layout = "~/Views/Shared/_SiteLayout.cshtml";
}

<h2>SURVEY : @Model.Title</h2>
<h3>@Model.Description</h3>
<hr />

@using (Html.BeginForm("SubmitSurvey", "HomePage", FormMethod.Post, new { id = "surveyForm" }))
{
    for (int index = 0; index < Model.SurveyQuestions.Count; index++)
    {
        @* Editor Template - Null result *@ 
        @*SurveyQuestionModel item = Model.SurveyQuestions[index];
        @Html.EditorFor(x => item);*@

        <p>@Model.SurveyQuestions[index].QuestionText</p>
        @Html.DropDownListFor(item => Model.SurveyQuestions[index].OptionId, new SelectList(Model.SurveyQuestions[index].Options, "OptionId", "OptionText"), string.Empty)
    }
    <input type="submit" value="SubmitSurvey" />
}

ビューモデル

public class TakeSurveyViewModel
    {
        public string Title { get; set; }
        public string Description { get; set; }
        public int SurveyId { get; set; }

        public List<SurveyQuestionModel> SurveyQuestions { get; set; } 

        public TakeSurveyViewModel() { }

        public TakeSurveyViewModel(int surveyId)
        {
            //Populate data - works ok.
        }
    }

DropDownList モデル

public class SurveyQuestionModel
    {
        public int QuestionId { get; set; }
        public string QuestionText { get; set; }

        [Required(ErrorMessage = "Please select an option.")]        
        public int OptionId { get; set; }

        public IEnumerable<QuestionOption> Options { get; set; } 
    }

ページは正常にレンダリングされ、すべてのドロップダウンに正しいオプションが表示されます。各選択の ID と名前も一意です -
id="SurveyQuestions_3__OptionId" name="SurveyQuestions[3].OptionId"

コントローラ アクション

[HttpPost]
public ActionResult SubmitSurvey(TakeSurveyViewModel model)
{
     return !ModelState.IsValid ? TakeSurvey(model.SurveyId) : null;
}

しかし、送信ボタンをクリックすると、コントローラーのアクション モデルが null になります。

編集: 2x HTML.BeginForm を削除しました

編集 2: SurveyQuestions にパブリック セッターが追加されました。問題はまだ残っているようです。この画像を見てください:

ここに画像の説明を入力

4

1 に答える 1

3

SurveyQuestions がプライベート セットであるという問題はありますか?

-古い回答- 2 x ( Html.BeginForm
(Html.BeginForm) がありusingます。同じ種類のことを行うステートメント内にフォームを含めるのを忘れていました。

于 2013-02-25T08:59:07.590 に答える