2010-03-01 57 views
2

我有一個單一的模式類型的收官各種型號我想在我看來,使用方法:ASP.NET MVC 2 - 如何從PartialView POST表單模型?

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

現在,我的問題鑑於我拉的數據從問題的對象 - 這很好。其次我經歷了所有答案的對象迭代,並將它們傳遞到局部視圖:

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

每個答案(在局部視圖),我有一些動作按鈕(如評級)。我爲每個按鈕使用單獨的表單POST和隱藏字段。

問題是我無法將整個QuestionViewData模型發佈到我的操作方法中,因爲我只有在部分視圖中將Answer對象作爲模型。但是,我需要從以QuestionViewData爲模型的動作返回完整的問題視圖。

我該如何處理這種情況?

回答

1

假設您的答案都包含問題的ID,您可以將答案發布到您的控制器方法,然後通過再次查找數據庫中的問題填充模型類型的其餘部分。然後,像往常一樣將您的QuestionViewData對象返回到視圖。

1

正如羅伯特·哈維說,你可以看看它的數據庫,但你也可以將其存儲在會話:

[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"]; 
    } 

會話數據可以在許多情況下會丟失,所以你應該在考慮的情況questionModel在POST操作中不再可用,但它在大多數情況下都可以正常工作。