我有一个模型类型来包装我想在我的视图中使用的各种模型:
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作为模型的那个动作返回完整的问题视图。
我该如何处理这种情况?
答案 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操作中,当问题模型不再可用时,您应该考虑一下情况,但它在大多数情况下都可以正常工作。