ASP.NET MVC - сообщение от одного контроллера до другого (действие к действию)

Возможно сделать, сообщение от Действия "Сохраняет" в контроллере "продукт" к Действию "SaveAll" в контроллере "Категория"??

И также передавая FormCollection как параметр

12
задан Nick Josevski 14 February 2012 в 11:16
поделиться

4 ответа

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

2
ответ дан 2 December 2019 в 18:18
поделиться

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

5
ответ дан 2 December 2019 в 18:18
поделиться
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 в контексте Продукта.

5
ответ дан 2 December 2019 в 18:18
поделиться

Вы можете объявить форму, подобную этой, в своем View и указать любой контроллер или Action, какой пожелаете.

Html.BeginForm("SaveAll", "Category", FormMethod.Post);

Если вы находитесь в контроллере, вы можете использовать.

TempData["Model"] = Model;
RedirectToAction("SaveAll", "Category");
8
ответ дан 2 December 2019 в 18:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: