【问题标题】:Redirect to a Controller from class method in ASP.NET MVC从 ASP.NET MVC 中的类方法重定向到控制器
【发布时间】:2020-05-18 13:17:50
【问题描述】:

请我在一个类中有一个 void 方法,我想从这个方法重定向到控制器中的一个动作,我尝试使用 RedirectToAction 但我没有在 Intellisense 中看到它,请问你有任何关于如何从这个 void 方法重定向到控制器操作的想法。

我从事 ASP.NET MVC 应用程序

非常感谢。

【问题讨论】:

  • 当您的问题被认为对其他人没有帮助时,它可能会被否决,因为例如它之前已经被问过并且没有显示您尝试过的内容。请阅读How to Ask
  • @GSerg 关闭,但这个问题是关于控制器中的空白。
  • @CodeCaster 谢谢你,兄弟,你是个好人,非常感谢

标签: c# asp.net-mvc


【解决方案1】:

你不能。

你可以使用 HttpContext.Current.Response.Redirect 或类似的东西,但不要,因为那样你会绕过整个 MVC 管道。

非控制器类不(或至少不应该)知道它正在用于 ASP.NET MVC 上下文中。你调用一个类的方法,让该方法执行特定的任务。

如果该任务的某个结果再次在 MVC 上下文中导致您的 Web 应用程序将用户重定向到另一个操作,那么在您的控制器中执行此操作。

所以,是这样的:

public ActionResult Foo()
{
    var result = someOtherClass.Bar();

    if (result.WhatEver)
    {
        return RedirectToAction(...);
    }

    return View(...);
}

是的,这意味着Bar() 可能不应该是void,而是返回一些有意义的东西。

您通常也不希望从控制器调用的类返回 ActionResult 派生结果。

【讨论】:

  • 但是我不想返回视图,我只想做一些操作而不返回视图
  • @ADSMB 返回视图是可选的操作。它没有说明您必须遵循模型-视图-控制器生态系统的完整周期。而对于 Web API - 你不应该。您可以简单地返回一个状态响应。
【解决方案2】:

在你的 void 中使用这个 sn-p:

RedirectToAction("SomeAction").ExecuteResult(this.ControllerContext);

所以,使用 IActionResult 来执行重定向

public IActionResult SomeAction()
{
    RedirectToAction("SomePlace", "SomeController");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-05
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多