0

HttpPost ActionHandler 内の MyViewRequest ビュー フィールドを使用して、WCF サービス呼び出しを行っています。目標は、部分ビューを使用して応答を表示することです。MyViewResponse

簡単に言えば、これら2つの項目を達成する必要があります-

  1. 最初の読み込み時に部分ビューの読み込みを無効にします。
  2. サービス呼び出し後に応答を (要求と共に) 表示します。

MyViewRequest.cshtml

@using (Html.BeginForm())
{
    @Html.ValidationSummary(false)
    //html code
}
</div>
<div id="dvResponse">
  @Html.Partial("MyViewResponse");
</div>

部分ビュー: MyViewResponse.cshtml

@model MvcApplication3.Models.MyModel
@{
    ViewBag.Title = "MyViewResponse";
}

<h2>MyView</h2>

@Html.Label(Model.MyName, "My Name")

これは、userControl を使用する Asp.Net では非常に単純でした。

4

1 に答える 1

2

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行動で、あなたは質問を示します。URL から 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ます。より明確にするために2つの方法を書きました。

今あなたのショービューで

@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});
  } 
}
于 2012-11-03T16:59:56.767 に答える