ASP.NET MVC 2 - 如何从PartialView发布表单模型?

时间:2010-03-01 20:28:37

标签: asp.net asp.net-mvc

我有一个模型类型来包装我想在我的视图中使用的各种模型:

public class QuestionViewData {
        public Question Question { get; set; }
        public IList<Answer> Answers { get; set; }
}

现在,在我的问题视图中,我从Question对象中提取数据 - 没关系。其次,我遍历所有Answer对象并将它们传递给局部视图:

<% foreach(Answer item in Model.Answers) { %>
        <% Html.RenderPartial("ShowAnswer", item); %>
<% } %>

对于每个答案(在局部视图中),我有一些操作按钮(如评级)。我正在使用单独的表单POST,每个按钮都有隐藏字段。

问题是我不能将整个QuestionViewData模型发布到我的动作方法,因为我在部分视图中只将Answer对象作为模型。但是,我需要从将QuestionViewData作为模型的那个动作返回完整的问题视图。

我该如何处理这种情况?

2 个答案:

答案 0 :(得分:1)

假设您的答案都包含问题的ID,您可以将答案发布到控制器方法,然后再次通过查找数据库中的问题来填充QuestionViewData模型类型的其余部分。然后像往常一样将QuestionViewData对象返回到视图。

答案 1 :(得分:1)

正如Robert Harvey所说,你可以从数据库中查找它,但你也可以将它存储在Session中:

   [HttpGet]
   public ActionResult ShowQuestion(int id)
   {
       var questionModel = new QuestionViewData();
       //populate questionModel
       Session["CurrentlyHandledQuestion"] = questionModel;
       return View(questionModel);
   }

   [HttpPost]
   public ActionResult ManageAnswer(params)
   {
       var questionModel = (QuestionViewData)Session["CurrentlyHandledQuestion"];
   }

在许多情况下,会话数据可能会丢失,因此在POST操作中,当问题模型不再可用时,您应该考虑一下情况,但它在大多数情况下都可以正常工作。

相关问题