Вызов другого метода post контроллера

#asp.net-mvc-3 #controller #http-post

#asp.net-mvc-3 #контроллер #http-post

Вопрос:

Я использую ASP.NET MVC 3 для моего веб-сайта.

Я создал частичное представление, в котором есть кнопки «Предыдущий», «Следующий» и «Сохранить». Я вызываю это частичное представление на своей главной странице.

Мое требование заключается в том, что, кем бы View я ни был, я должен иметь возможность вызывать разные Save методы в разных контроллерах, передавая соответствующие Model данные действиям контроллера.

Пример

  • У меня есть 4 шага ввода данных, у меня есть другой контроллер для каждого шага.
  • Если я перехожу к шагу 1 и нажимаю Сохранить, значения формы должны перейти к методу действия Step1Controller ,
  • Если я нахожусь на шаге 2, тогда post должен вызвать Step2Controller

Что-то вроде этого:

 public ActionResult Save(GenericModel model)
{
    //use reflection to find out model type

    //call appropriate controller action with model

    return RedirectToAction("Create", new { Controller = "Conference", Action = "Create" });
}
  

Этот метод сохранения будет вызван для Save кнопки на Master page . Как я могу этого добиться?

Комментарии:

1. Это звучит как потенциальное неправильное использование концепции контроллера и модели. Почему одно представление обращается к нескольким контроллерам для получения результата post формы с одной и той же моделью? Если все, что вам нужно, это вызвать другие функции, непременно создайте функцию в том же контроллере, но вам нужно переоценить то, что вы пытаетесь здесь сделать. Каждое представление (или частичное представление) должно завершать свою собственную форму и вызывать свое собственное действие контроллера при отправке.

Ответ №1:

Являются ли формы отдельными действиями на контроллерах?

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

 <form method="post" action="/step1controller/action">
  

Форма 2 — это:

 <form method="post" action="/step2controller/action">
  

Решает ли это вашу проблему?

Комментарии:

1. Я не могу предоставить форму с именем контроллера и действия для конкретного шага, поскольку одна и та же кнопка сохранения будет использоваться на всех других views.so это решено в общем контроллере, который в дальнейшем вызовет соответствующее действие контроллера. Что я пытаюсь сделать, так это то, что моя кнопка сохранения вызовет действие контроллера для каждого post из всех представлений, и оттуда будет решено, какой метод сохранения на каком контроллере должен быть вызван с моделью, переданной этому действию.

Ответ №2:

Я бы создал частный метод в контроллере и вызывал на каждой части первых шагов.

 private bool Save(GenericModel model)
{
   ......
}

[HttpPost]
public bool SaveStep1(GenericModel model)
{
      this.Save(model);
}

[HttpPost]
public bool SaveStep2(GenericModel model)
{
      this.Save(model);
}