Вызов другого метода публикации контроллера

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

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

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

Пример

  • У меня есть 4 шага ввода данных, у меня есть другой контроллер для каждого шага.
  • Если я нахожусь на шаге 1 и нажимаю «Сохранить», значения формы должны перейти к методу действия Step1Controller,
  • Если я нахожусь на шаге 2, тогда сообщение должно вызывать 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. Как я могу этого добиться?


person Vivek    schedule 12.04.2011    source источник
comment
Это звучит как потенциальное неправильное использование концепции контроллера и модели. Почему одно представление обращается к нескольким контроллерам для результата публикации формы с одной и той же моделью? Если все, что вам нужно, это вызвать другие функции, во что бы то ни стало создайте функцию в том же контроллере, но вам нужно переоценить то, что вы пытаетесь сделать здесь. Каждое представление (или частичное представление) должно оборачивать свою собственную форму и вызывать свое собственное действие контроллера при отправке.   -  person dodexahedron    schedule 18.08.2012


Ответы (2)


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

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

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

Форма 2 это:

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

Это решает вашу проблему?

person tooba    schedule 12.04.2011
comment
Я не могу указать форму с именем контроллера и действия для конкретного шага, так как одна и та же кнопка сохранения будет использоваться для всех других представлений. Поэтому ее решение принято в общем контроллере, который в дальнейшем будет вызывать соответствующее действие контроллера. Что я пытаюсь сделать, так это то, что моя кнопка «Сохранить» будет вызывать действие контроллера для каждого сообщения из всех представлений, и оттуда будет решаться, какой метод сохранения для какого контроллера должен вызываться с моделью, переданной этому действию. - person Vivek; 12.04.2011

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

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

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

[HttpPost]
public bool SaveStep2(GenericModel model)
{
      this.Save(model);
}
person Roger Medeiros    schedule 18.08.2012