次のようなシナリオがあります。「調査」には「質問」タイプのリストが含まれます。「質問」は ID と「テキスト」という文字列で構成されます。クラス定義は次のとおりです。
public class Survey
{
public int SurveyId { get; set; }
public string Title { get; set; }
public List<Question> Questions { get; set; }
public Survey()
{
this.Questions = new List<Question>();
}
}
public class Question
{
public int QuestionId { get; set; }
public string QuestionText { get; set; }
public int OwningSurveyId { get; set; }
}
特定の調査のページからリンクして新しい質問を作成できるようにしたいのですが (問題なく動作します)、質問フォームが送信されたときに 2 つのことを行いたいです。1) OwningSurveyId が正しく設定されていることを確認し、2) 質問を Survey.Questions リストに追加します。
私はこの機能を実現するためのあらゆるソリューションを受け入れています。私が取ったアプローチは最善ではないかもしれません。私が決定したのは、Survey オブジェクトを Question の Create フォームに渡すことでした。これにより、フォームが送信されたときにフォームに両方のオブジェクトが含まれ、上記の両方のタスク (1 と 2) を正しく実行できるようになります。
QuestionController で Create Question ページを次のように設定します。
// GET: /Question/Create
public ActionResult Create(Survey OwningSurvey)
{
return View(OwningPulse);
}
[HttpPost]
public ActionResult Create(Pulse OwningPulse, Question NewQuestion)
{
ModelState["OwningSurveyId"].Errors.Clear();
if (ModelState.IsValid)
{
OwningPulse.Questions.Add(NewQuestion);
db.Questions.Add(NewQuestion);
db.SaveChanges();
return RedirectToAction("Index", "Survey");
}
return View(OwningSurvey);
}
また、質問の Create.cshtml ファイルには次の内容が含まれています。
@model MoodTool.Interface.Models.Survey
@{
ViewBag.Title = "Create";
var Question = new MoodTool.Interface.Models.Question();
Question.OwningPulseId = Model.SurveyId;
}
@using (Html.BeginForm("Create", "Question", "{NewQuestion}", FormMethod.Post, new { NewQuestion = Question }))
{... code follows
私が抱えている問題は、.cshtml ファイルの "Model" の値が null であるため、ページがクラッシュすることです。質問コントローラー ("GET" バージョン) の Create メソッドの OwningSurvey の値も null です。
誰かが私を正しい方向に導くことができますか? 私はおそらく何か大きな間違い (設計パターン) を行っているか、単純な構文エラーを犯していることに気付きましたが、MVC は初めてで、ぐるぐる回っています。
ありがとう