我意识到在SO上有很多这样的问题但是没有一个解决方案对我有用,这可能是因为我遗漏了一些我不知道的简单问题。在我的应用程序中,我添加了一个名为 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
我希望能够将参数作为路由值传递,因此我的网址看起来像
/Error/SomeError
所以我将以下映射添加到我的RouteConfig.cs文件中:
routes.MapRoute(
name: "Test",
url: "{controller}/{action}/{errorMessage}",
defaults: new { controller = "Error", action = "Index", errorMessage = "defaultErrorMessageTest" }
);
但它不起作用。当我尝试使用类似/Error/HelloWorld
的URL调用方法时,出现黄屏错误,指出无法找到资源。我在这里错过了什么吗?
答案 0 :(得分:1)
我认为你在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" });
}
}
答案 1 :(得分:1)
更改
return RedirectToAction("", "Error", new { errorMessage = "SomeError" });
到
return RedirectToAction("Index", "Error", new { errorMessage = "SomeError" });
然后将您的路线更改为:
routes.MapRoute(
name: "Test",
url: "error/{errorMessage}",
defaults: new { controller = "Error", action = "Index", errorMessage = "defaultErrorMessageTest" }
);
此外,请确保此路线高于您的默认路线。