1

同じページに2つのフォームがあります。1つは、このPodFormと呼ばれる子アクションを介してレンダリングされる部分ビューのフォームです。2番目は、現在のアクションによってレンダリングされます。

したがって、私のコードは次のようになります(名前などは無視してください。これはサンプルコードです)。

Form.cshtml

@model MyProject.Models.FormInputModel
@using(Html.BeginForm("Form","Main",FormMethod.Post))
{
  @Html.TextBoxFor(x=>x.AField)
  @* Some other fields *@
  <input type="submit"/>
}

<div class="sidebar">
   @Html.Action("PodForm","Pod")
</div>

PodForm.cshtml

@model MyProject.Models.PodFormInputModel
@using(Html.BeginForm("PodForm","Pod",FormMethod.Post))
{
  @Html.TextBoxFor(x=>x.Name)
  @* Some other fields *@
  <input type="submit"/>
}

メインフォームで[送信]をクリックすると、PodFormアクションメソッドがトリガーされます。どうしたの?

編集-コメントで要求されたように

  1. 生成されたマークアップは次のようになります。

    <form action="/Main/Form" encoding="multipart/form-data" method="POST">
         <input type="text" name="AField" />
         <input type="submit" />
      </form>
    
     <div class="sidebar">
       <form action="/Pod/PodForm" method="POST">
           <input type="text" name="Name" />
           <input type="submit" />
       </form>
     </div>
    
  2. コントローラのアクション

    「MainController」(実際の名前ではありません)には、「Form」と呼ばれるアクションがあります

    public MainController : Controller
    {
        public ActionResult Form()
        {
            return View();
        }
    
        [HttpPost]
        public ActionResult Form()
        {
            if(ModelState.IsValid)
            {
              //Save
            }
    
            return View();
        }
    }
    

    「PodController」(実際の名前ではありません)には、「PodForm」と呼ばれるアクションがあります。HttpPostがビューを返さない理由は、子アクションからそれを行うと、部分的なビューだけが返されるためです。私が望むものではありません。

        public PodController : Controller
        {
           public ActionResult PodForm()
           {
              return View();
           }
    
           [HttpPost]
           public ActionResult PodForm(PodFormInputModel model)
           {
              if(ModelState.IsValid)
              {
                 //Save the thing   
    
                  return RedirectToAction(Request.HttpReferrer.ToString()).AndFlash("Saved");
              }
    
              return RedirectToAction(Request.HttpReferrer.ToString()).AndFlash("Not saved");
           }
        }
    

更新:最初のアクションメソッド呼び出されることがわかりましたが、View()を返すため、ビューエンジンは送信ロジックをトリガーするGetとしてではなくPostとしてPodFormアクションメソッドを呼び出しています。変。

4

1 に答える 1

1

メイン フォームの Action メソッドが最初にヒットし、正しく応答していることがわかりました。ただし、メイン フォームのビューがレンダリングされると、ポッド フォームの子アクションもレンダリングされますが、リクエストが投稿だったため、HttpPost アクション メソッドがレンダリングされ、問題が発生します。

HttpPost メソッドの名前を変更し、PodForm.cshtml を変更してこの新しいアクション メソッドを使用することで修正しました。

于 2011-05-10T22:04:45.750 に答える