我認爲最好的方法是使用ViewModels來傳輸數據。讓我們假設你想要一個應用程序,像stackoverflow,你有一個問題,用戶可以發佈一個答案,它會顯示在帖子後面的問題。
public class PostViewModel
{
public int ID { set;get;}
public string Text { set;get;}
public List<PostViewModel> Answers { set;get;}
public string NewAnswer { set;get;}
}
在您的GET
操作中,您將顯示該問題。從網址獲取ID,並從服務/存儲庫中獲取問題詳細信息。
public ActionResult Show(int id)
{
var post=new PostViewModel();
post=yourService.GetQuestionFromID(id);
post.Answers=yourService.GetAnswersFromQuestionID(id);
return View(post);
}
假設yourService.GetQuestionFromID
方法返回PostViewModel的目的與填充在歡迎使用屬性值。數據可以從數據庫中獲取,也可以通過WCF服務調用獲取。它是由你決定。另外yourService.GetAnswersFromQuestionID
方法返回一個PostViewModel列表來表示該問題的答案。您可以將這兩種方法放在一個名爲GetQuestionWithAnswers
的方法中。我寫了兩種方法使其更加清晰。
在顯示視圖
@model PostViewModel
@Html.LabelFor(x=>x.Text);
@using(Html.Beginform())
{
@Html.HiddenFor(x=>x.ID);
@Html.TextBoxFor(x=>x.NewAnswer)
<input type="submit" />
}
<h3>Answers</h3>
@if(Model.Answers!=null)
{
@Html.Partial("Responses",Model.Answers)
}
而且你的局部視圖
現在將被強類型到PostViewModel
@model List<PostViewModel>
@foreach(var item in Model)
{
<div> @item.Text </div>
}
收集處理回發簡單(HttpPost)
[HttpPost]
public ActionResult Show(PostViewModel model)
{
if(ModelState.IsValid)
{
//get your data from model.NewAnswer property and save to your data base
//or call WCF method to save it.
//After saving, Let's redirect to the GET action (PRG pattern)
return RedirectToAction("Show",new { @id=model.ID});
}
}
在什麼情況下你想做WCF調用並顯示響應? – Shyju
@Shyju我在'HttpPost' ActionHandler中進行了serivce調用,並且當前顯示了默認視圖。即'返回查看()' – Abhijeet