Мне нужно вызвать контроллер B действия FileUploadMsgView из контроллера A и нужно передать параметр для него.
Code---its not going to the controller B's FileUploadMsgView().
In ControllerA
private void Test()
{
try
{//some codes here
ViewBag.FileUploadMsg = "File uploaded successfully.";
ViewBag.FileUploadFlag = "2";
RedirectToAction("B", "FileUploadMsgView", new { FileUploadMsg = "File uploaded successfully" });
}
In ControllerB receiving part
public ActionResult FileUploadMsgView(string FileUploadMsg)
{
return View();
}
c#
asp.net-mvc
asp.net-mvc-4
user2156088
источник
источник
Ответы:
Контроллеры - это просто классы - новый и вызов метода действия, как и любой другой член класса:
var result = new ControllerB().FileUploadMsgView("some string");
источник
var controller = DependencyResolver.Current.GetService<ControllerB>();
Как говорит @mxmissile в комментариях к принятому ответу, вы не должны обновлять контроллер, поскольку в нем будут отсутствовать зависимости, установленные для IoC, и не будет иметь
HttpContext
.Вместо этого вы должны получить экземпляр вашего контроллера следующим образом:
источник
HttpContext
инъекцию.var controller
будет назначен типControllerB
, да.HttpContext
). Я полагаю, что использовал этот подход без какого-либо IoC, чтобы получить «неглубокий» объект контроллера (просто необходим доступ к определенным функциям), и изначально был озадачен, почему детали «отсутствовали». [в сторону: я работал над этим, все еще используя этот подход, но, вероятно, следовало бы переориентировать эту функциональность на общий класс.] Что касается настройки и выбора IoC, мне придется обратиться к другим статьям / таким вопросам.Ваш пример выглядит как код psuedo. Вам необходимо вернуть результат
RedirectToAction
:источник
как говорит @DLeh, используйте скорее
Но, учитывая контроллер, контекст контроллера важен, особенно когда вам нужен доступ к
User
объекту,Server
объекту илиHttpContext
внутри «дочернего» контроллера.Я добавил строку кода:
иначе вы могли бы использовать System.Web для доступа к текущему контексту, для доступа
Server
к ранним объектамNB: я нацеливаюсь на версию фреймворка 4.6 (Mvc5)
источник
controller.RouteData.Values["controller"] = "Home";controller.RouteData.Values["action"] = "Index";
Предполагая, что вы пытаетесь вернуть результат действия Index в HomeController.this
а неcontroller
. В конечном итоге результат возвращается через локальный контроллер (это), так что вот что в итоге пытается найти представление.return View("ViewName");
вместо этого простоreturn View();
Пусть распознаватель автоматически сделает это.
Внутри контроллера:
источник
Если кто-то смотрит, как это сделать в ядре .net, я сделал это, добавив контроллер при запуске.
Затем вводить его в другой контроллер
Тогда просто назови это так
_myControllerIwantToInject.MyMethodINeed();
источник
Это именно то, что я искал после того, как обнаружил,
RedirectToAction()
что не прошел бы объекты сложного класса.В качестве примера я хочу вызвать
IndexComparison
метод вLifeCycleEffectsResults
контроллере и передать ему объект сложного класса с именем model.Вот код, который не удалось:
Стоит отметить, что строки, целые числа и т. Д. Пережили поездку к этому методу контроллера, но объекты общего списка страдали от того, что напоминало утечки памяти C.
Как рекомендовано выше, вот код, который я заменил:
Все работает как задумано сейчас. Спасибо за лидерство.
источник
Ответ Длеха верен и объясняет, как получить экземпляр другого контроллера без отсутствующих зависимостей, настроенных для IoC
Однако теперь нам нужно вызвать метод из этого другого контроллера.
Полный ответ будет:
источник
Я знаю, что он старый, но вы можете:
источник
если проблема в том, чтобы позвонить. Вы можете вызвать это, используя этот метод.
источник
var res = new ControllerB().SetUpTimer(new TimeSpan(23, 20, 00));