我在MVC3应用程序的某个页面上。浏览器中的网址为http://localhost:60901/MyApp/Ideas/Create/。现在我在发布一些数据后在这个页面上得到一个例外。我有错误处理。简化版如下所示。
Global.asax中
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
RouteData routeData = new RouteData();
routeData.Values.Add("action", "General");
routeData.Values.Add("e", exception);
using (ErrorController errorController = new ErrorController())
{
((IController)errorController).Execute(new RequestContext(new HttpContextWrapper(HttpContext.Current), routeData));
}
}
ErrorController.cs
public class ErrorController : Controller
{
public ActionResult General(Exception e)
{
ViewBag["ReturnToUrl"] = Url.Action("Index", "Ideas");
return View();
}
}
ViewBag中的ReturnToUrl令人惊讶的是 // Ideas / Index / MyApp 前缀是什么?通常,Url.Action(“Index”,“Ideas”)返回 / MyApp / Ideas / Index / 。控制器上下文有问题吗?如何解决这个问题?
答案 0 :(得分:1)
为什么不手动设置ViewBag [“ReturnToUrl”] =“/ MyApp / Ideas / Index /”。
答案 1 :(得分:1)
Jarek,
“MyApp”是您申请的一个区域吗?如果是这样,您可以将区域指定为路径值的一部分,如下所示:
Url.Action("Action", "Controller", new { Area = "MyApp" });
如果“MyApp”不是某个区域,您可以稍微解释一下您的配置。
希望这有帮助,
-covo
答案 2 :(得分:0)
我发现了问题。这是我的错。我错过了这个案例,我正在使用的系统中的所有路由都定义如下:
routes.MapRoute(
"Default", // Route name
"{application}/{controller}/{action}/{*id}", // URL with parameters
new { controller = "Welcome", action = "Index", id = UrlParameter.Optional, application = UrlParameter.Optional } // Parameter defaults
);
他们在开头({controller}参数之前)有一个{application}参数。
以前,我没有将此参数传递给ErrorController
。通过后
routeData.Values.Add("application", "MyApp");
程序按预期工作。