ASP.NET MVC3: 2 формы на странице, отправка вызывает неправильную - PullRequest
1 голос
/ 09 мая 2011

У меня есть 2 формы на одной странице. Одна из них - это форма в частичном представлении, которая отображается с помощью дочернего действия, которое мы назовем этой PodForm. Второй отображается текущим действием.

Итак, мой код выглядит примерно так (пожалуйста, игнорируйте имена и т. Д., Это пример кода):

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 не возвращает View, заключается в том, что выполнение этого из дочернего действия возвращает только частичное представление, а не то, что я хочу.

        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 (), механизм представления вызывает метод действия PodForm как Post, а не как Get который вызывает логику отправки. Weird.

1 Ответ

1 голос
/ 11 мая 2011

Я выяснил, что метод Action для основной формы получает удар первым и отвечает правильно. Однако, когда отображается представление для главной формы, дочернее действие для формы pod также отображается, но поскольку запрос был публикацией, он отображает метод действия HttpPost, вызывая проблему.

Я исправил это, переименовав метод HttpPost и изменив PodForm.cshtml для использования этого нового метода действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...