我有一个场景如下;“调查”包含“问题”类型的列表;“问题”由一个 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; }
}
我希望能够从特定调查的页面链接以创建一个新问题(效果很好),但是当提交问题表单时,我想做两件事;1) 确保正确设置了 OwningSurveyId,2) 将问题添加到 Survey.Questions List。
我对任何获得此功能的解决方案持开放态度——我采用的方法可能不是最好的。我决定做的是将调查对象传递给问题的创建表单,以便在提交表单时,表单包含两个对象,因此我可以正确执行上述两个任务(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 文件中“模型”的值为空,因此页面崩溃。Question 控制器(“GET”版本)的 Create 方法中的 OwningSurvey 的值也为空。
谁能指导我正确的方向?我意识到我可能在做一些严重错误的事情(设计模式),或者犯了一个简单的语法错误,但我是 MVC 的新手并且在循环中。
谢谢