Как насчет
np.unique(itertools.permutations([1, 1, 1]))
Проблема заключается в том, что теперь перестановки представляют собой строки массива Numpy, тем самым используя больше памяти, но вы можете циклически их перемещать по-прежнему
perms = np.unique(itertools.permutations([1, 1, 1]))
for p in perms:
print p
Контроллеры - это только классы - новый и вызов метода действия, как и любой другой член класса:
var result = new ControllerB().FileUploadMsgView("some string");
Ответ Dleh верен и объясняет, как получить экземпляр другого контроллера без отсутствующих зависимостей, настроенных для IoC
Однако теперь нам нужно вызвать метод из этого другого контроллер. Полный ответ:
var controller = DependencyResolver.Current.GetService<ControllerB>();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext, controller);
//Call your method
ActionInvoker.InvokeAction(controller.ControllerContext, "MethodNameFromControllerB_ToCall");
Это именно то, что я искал после обнаружения того, что RedirectToAction()
не будет передавать сложные объекты класса.
В качестве примера я хочу вызвать метод IndexComparison
в контроллере LifeCycleEffectsResults
и передать ему сложный объект класса с именем model.
Вот неудавшийся код:
return RedirectToAction("IndexComparison", "LifeCycleEffectsResults", model);
Стоит отметить, что строки, целые числа и т. д. выжили в пути к этому методу контроллера, но общие объекты списка страдали от того, что напоминало утечки памяти C.
Как было рекомендовано выше, вот код, который я заменил на него:
var controller = DependencyResolver.Current.GetService<LifeCycleEffectsResultsController>();
var result = controller.IndexComparison(model);
return result;
Все работает как сейчас. Спасибо, что завели путь.
Пусть резольвер автоматически сделает это.
Внутри контроллера A:
public class AController : ApiController
{
private readonly BController _bController;
public AController(
BController bController)
{
_bController = bController;
}
public httpMethod{
var result = _bController.OtherMethodBController(parameters);
....
}
}
Поскольку @mxmissile говорит в комментариях к принятому ответу, вы не должны вводить новый контроллер, потому что он будет отсутствовать зависимостями, установленными для IoC, и не будет иметь HttpContext
.
Вместо этого вы должны получить экземпляр своего контроллера следующим образом:
var controller = DependencyResolver.Current.GetService<ControllerB>();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext, controller);
HttpContext
.
– brichins
28 August 2015 в 21:34
HttpContext
). Я полагаю, что использовал этот подход без i> любого IoC, чтобы получить "мелкий" (просто нужен доступ к определенным функциям) и изначально был смущен тем, почему части «отсутствовали». [В стороне: я работал над этим, все еще используя этот подход, но, вероятно, должен был перестроить эту функциональность для общего класса.] Что касается настройки IoC и выбора, я должен был бы отнести вас к другим статьям / SO-вопросам.
– brichins
12 December 2016 в 20:59
, поскольку @DLeh говорит, что Use use
var controller = DependencyResolver.Current.GetService<ControllerB>();
Но, давая контроллеру, контекст controlller важен, особенно когда вам нужно получить доступ к объекту User
, объекту Server
или к HttpContext
внутри «дочернего» контроллера.
Я добавил строку кода:
controller.ControllerContext = new ControllerContext(Request.RequestContext, controller);
, иначе вы могли бы использовать System.Web для доступа к текущему контексту, для доступа к Server
или ранним меченым объектам
NB: я нацелен на фреймворк версии 4.6 (Mvc5)
controller.RouteData.Values["controller"] = "Home";controller.RouteData.Values["action"] = "Index";
Предполагая, что вы пытаетесь вернуть результат из действия Index в HomeController.
– Steven
18 June 2016 в 01:28
this
, а не к controller
. В конечном итоге результат возвращается через локальный контроллер (это), так что это то, что в конечном итоге пытается найти представление.
– aaaantoine
29 August 2016 в 13:36
return View("ViewName");
вместо этого только return View();
– mNejkO
13 March 2017 в 00:52
Ваш образец выглядит как псевдокод. Вы должны вернуть результат RedirectToAction
:
return RedirectToAction("B",
"FileUploadMsgView",
new { FileUploadMsg = "File uploaded successfully" });
public ActionResult First_controller()
{
return Redirect("~/File_upload/Second_controller");
}
public ActionResult Second_controller()
{
return View();
}
, если проблема заключается в вызове. вы можете вызвать его с помощью этого метода.
yourController obj= new yourController();
obj.yourAction();
var res = new ControllerB().SetUpTimer(new TimeSpan(23, 20, 00));
– user5173426
29 March 2018 в 09:49
var controller = DependencyResolver.Current.GetService<ControllerB>();
– mxmissile 12 December 2014 в 18:11