Несколько форм в MVC3 - PullRequest
       5

Несколько форм в MVC3

2 голосов
/ 02 апреля 2012

У меня есть веб-страница с формой, которая выглядит примерно так:

@using (Html.BeginForm("MyAction", "Controller", FormMethod.Post))
{
    // html input fields here
    // ...
    // [SUBMIT]
}

Когда пользователь нажимает кнопку отправки, вызывается следующая функция:

public ActionResult MyAction ( string id )
{
    // default action
}

[HttpPost]
public ActionResult MyAction ( MyModel model )
{
    // called when a form is submitted
}

Теперь моя проблема в том, что мне нужно добавить еще одну форму.Но как я могу узнать, какая форма была отправлена?Потому что оба теперь окажутся во втором (HttpPost) методе ...

Что было бы хорошим способом разделить оба действия формы?Обратите внимание, что при отправке формы я должен оставаться на той же странице.Я не могу перенаправить себя на другую страницу / контроллер.

Ответы [ 3 ]

5 голосов
/ 02 апреля 2012

Если я правильно понимаю ваш вопрос, у вас будет страница с двумя формами.В качестве первого подхода я опубликую каждую форму для различных действий одного и того же контроллера.

Первый

@using (Html.BeginForm("MyAction", "Controller", FormMethod.Post))

Второй

@using (Html.BeginForm("MyAction2", "Controller", FormMethod.Post))

, а затемНебольшой рефакторинг ваших двух действий в соответствии с принципом DRY .

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

3 голосов
/ 27 апреля 2012

Если у вас есть несколько форм на одной странице / просмотре и вы хотите публиковать в разных действиях, добавьте атрибут html name в метод beginform:

@using (Html.BeginForm("action1", "contollerName", new { @name = "form1" }))
{
    ...add view code
}

@using (Html.BeginForm("action2", "contollerName", new { @name = "form2" }))
{
    ...add view code
}

Наличие разных имен для каждой формы позволит MVC легко определить, какое действие следует публиковать, а не полагаться на разные значения коллекции форм, чтобы выяснить это.

1 голос
/ 02 апреля 2012

Если вы хотите просматривать данные без перенаправления, я бы предложил вам использовать для этого JQuery Ajax. Вы можете использовать следующее в качестве образца

 $(document).ready(function(){

    $('#IdOfButton').click(function(){ 

      $.ajax({
        url: '/Controller/MyAction',
        type: 'POST',
        data: {
           PropertyInModel : ValueFromView
           //for values you need to pass from view to controller
        },
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            alert(data.success);
        },
        error: function () {
            alert("error");
        }
    });

    });
});

ваше действие будет выглядеть так

 [HttpPost]
    public ActionResult MyAction ( MyModel model )
    {
        // called when a form is submitted
        return Json(new { success = true });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...