Возможно сделать, сообщение от Действия "Сохраняет" в контроллере "продукт" к Действию "SaveAll" в контроллере "Категория"??
И также передавая FormCollection как параметр
Поскольку POST
является глаголом для HTTP-запроса, это имеет смысл (как написано) только в том случае, если .Save ( )
инициирует петлевое соединение HTTP с соответствующим маршрутом .SaveAll ()
, (например, http: //..../Category/SaveAll
) и передает форму сбор как часть запроса. Это глупо и не рекомендуется , так как это нарушит ваши возможности модульного тестирования этого контроллера .
Однако, если вы имеете в виду, что хотите вызвать .SaveAll ()
и вернуть полученный результат обратно клиенту, вы можете использовать .RenderAction ()
и передать Коллекция моделей или форм, полученная .Save ()
в качестве параметра.
Или на стороне сервера просто создайте экземпляр контроллера Category и вызовите его метод .SaveAll (), снова передав модель, полученную от .Save ()
в качестве параметра.
public ActionResult Save(MyModel m)
{
Category cat = new Category();
return cat.SaveAll(m);
}
Однако вам нужно будет взять результат этого вызова и убедиться, что он правильно обрабатывается полученным представлением.
Если это то, что вы пытаетесь сделать, стоит отметить, что у вас действительно должен быть код метода .SaveAll ()
, который выполняет сохранение, разделенное на специальный уровень бизнес-логики, а не живущий в контроллере. Теоретически все эти функции должны быть доступны для использования в другом контроллере или в библиотеке, которая может быть включена в другие приложения.
Я бы либо просто обновил ваши категории в вашем репозитории напрямую с помощью метода Save вашего контроллера продукта, либо реорганизовал функциональность сохранения категорий в ее собственном методе и вызвал бы это от обоих методов контроллера.
public class Product : Controller
{
...
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save(FormCollection productValues)
{
...
RedirectToAction("SaveAll", "Category", new { formValues = productValues });
}
...
}
public class Category : Controller
{
...
public ActionResult SaveAll(FormCollection formValues)
{
...
}
}
Предполагается, что вы выполняете POST в контексте Продукта.
Вы можете объявить форму, подобную этой, в своем View и указать любой контроллер или Action, какой пожелаете.
Html.BeginForm("SaveAll", "Category", FormMethod.Post);
Если вы находитесь в контроллере, вы можете использовать.
TempData["Model"] = Model;
RedirectToAction("SaveAll", "Category");