#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);
}