【问题标题】:ASP.NET MVC 2 - How to POST form Model from PartialView?ASP.NET MVC 2 - 如何从 PartialView 发布表单模型?
【发布时间】:2010-03-01 20:28:36
【问题描述】:

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

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 作为模型的操作返回完整的问题视图。

我该如何处理这种情况?

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      正如罗伯特哈维所说,你可以从数据库中查找它,但你也可以将它存储在 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 操作中不再可用的情况,但它在大多数情况下都可以正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-18
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多