我意识到有很多这样的问题,但是这些解决方案似乎对我有用,这可能是因为我错过了一些简单的东西,我不知道。在我的应用程序中,我添加了一个名为 errorController 的控制器,并带有称为 error.cshtml 的视图。控制器看起来像这样:
public class ErrorController : Controller
{
public ActionResult Index(string errorMessage)
{
ViewBag.Error = errorMessage;
return View();
}
}
现在,假设我想从另一个控制器重定向到此操作。我能够使用
来实现这一目标public ActionResult DoStuff(MyModel model)
{
return RedirectToAction("", "Error", new { errorMessage = "SomeError" });
}
当调用重定向时,我注意到参数被以查询字符串传递:
/Error?errorMessage=SomeError
我希望能够将参数作为路由值传递,因此我的URL看起来像
/Error/SomeError
因此,我将以下映射添加到我的RouteConfig.cs文件:
routes.MapRoute(
name: "Test",
url: "{controller}/{action}/{errorMessage}",
defaults: new { controller = "Error", action = "Index", errorMessage = "defaultErrorMessageTest" }
);
但行不通。当我尝试使用诸如/Error/HelloWorld
之类的URL调用该方法时,我会发现一个黄色屏幕错误,说找不到资源。我在这里错过了什么吗?
更改
return RedirectToAction("", "Error", new { errorMessage = "SomeError" });
to
return RedirectToAction("Index", "Error", new { errorMessage = "SomeError" });
,然后将您的路线更改为:
routes.MapRoute(
name: "Test",
url: "error/{errorMessage}",
defaults: new { controller = "Error", action = "Index", errorMessage = "defaultErrorMessageTest" }
);
另外,请确保此路线到达您的默认路线上方。
我认为您在Routeconfig中的问题对我来说很好。
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Test",
url: "Error/{errorMessage}",
defaults: new { controller = "Error", action = "Index", errorMessage = "defaultErrorMessageTest" }
);
routes.MapRoute(
name: "Defualt",
url: "{controller}/{action}",
defaults: new { controller = "Test", action = "DoStuff" }
);
}
}
public class ErrorController : Controller
{
public ActionResult Index(string errorMessage)
{
ViewBag.Error = errorMessage;
return View("Error");
}
}
public class TestController : Controller
{
public ActionResult DoStuff()
{
return RedirectToAction("Index", "Error", new { errorMessage = "SomeError" });
}
}