如何从另一个控制器调用不同控制器中的操作

How to invoke an action in different controller from another controller

我有一个使用 .NET 4.6.2 编写的新 ASP.NET MVC 应用程序。这是一个简单的应用程序,只有一页。但是,今天用户遇到了问题,所以我开始尝试使用 Exception 对象中的 Message 值来使用 Shared 文件夹和 Error 控制器中的 Err.cshtml 文件。但是,我以前没有使用过它,我发现帮助解决这个问题的页面不接受传递给它的参数。 https://www.c-sharpcorner.com/UploadFile/618722/custom-error-page-in-Asp-Net-mvc/#:~:text=Custom%20Error%20Page%20in%20ASP.NET%20MVC%201%20First,an%20%5BHandleError%5D%20attribute%20to%20the%20Targeted%20Action%20Method.

所以,我想尝试在 Views 下的 Error 文件夹中创建另一个 Error.cshtml 文件,希望它仍然使用 Error 控制器。但是,这会导致其他几个错误,具体取决于我如何指定对 RedirectToAction() 方法的调用。如果我像这样指定调用:return RedirectToAction("Index", "Error", errText);,那么它会通过 HTTP 404 错误向我投诉。我真的认为这行得通,因为控制器中的动作名称是 Index。所以,我尝试使用 return RedirectToAction("Error", "Error", errText);,但这给了我一个稍微不同的 HTTP 404 错误。

我已经搜索过这个问题的答案,但我只能找到从一个视图调用控制器或使用 ASP.NET Core 的结果。 (我希望我可以,但我不能。)为了使我的问题复杂化,我无法从我的搜索中获得某些结果,因为结果在 GitHub 上。我的雇主正在阻止 GitHub。

这是我的 HomeController 中的代码,我遇到了困难:

        public ActionResult Index(SuggestedText suggestedText)
        {
            try
            {
                SendAnonymously.SuggestedTextToEmail(suggestedText.SuggestionToBeEmailed);
            }
            catch (Exception ex)
            {
                var errText = new ErrorText();
                errText.TextToDisplay = SendAnonymously.ReturnExceptions(ex);
                //return View("../Shared/Error", errText);
                return RedirectToAction("Index", "Error", errText);
            }

            return View(suggestedText);
        }

ErrorText class 非常简单:

public class ErrorText
{
    public string TextToDisplay { get; set; }
}

当您重定向到 Error 视图时,您可以在您的情况下使用 TempData

public ActionResult Index(SuggestedText suggestedText)
{
    try
    {
        SendAnonymously.SuggestedTextToEmail(suggestedText.SuggestionToBeEmailed);
    }
    catch (Exception ex)
    {
        var errText = new ErrorText();
        errText.TextToDisplay = SendAnonymously.ReturnExceptions(ex);
        //return View("../Shared/Error", errText);
        TempData["ErrorText"] = errText;
        //Redirect to Error view under Error Controller
        return RedirectToAction("Error", "Error");
    }

    return View(suggestedText);
}

然后您可以在 Error 方法中检索此值,如下所示:

public ActionResult Error()
{
  ErrorText errText=new ErrorText();
  if(TempData["ErrorText"] !=null)
  {
     errText=TempData["ErrorText"] as ErrorText
  }

  return View(errText)
}