0

其他人遇到过这个问题吗?我一定是做错了什么。

所以我正在为这样的错误设置一条路线:

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{error}",
 new { error = "" }
);

并像这样调用:

return parentController.RedirectToRoute("SharedError", new RouteValueDictionary(new { error = errorMessage.ToString() }));

在控制器上:

public ActionResult Error(String error)

简单吧?好吧,当它实际运行时,尽管 url 看起来像这样,但错误为 null:

/共享/错误/ThisIsTheError

但是Error方法中的error参数为null。(是的,我试过其他词)

现在,如果我用“id”这个词替换所有这些,一切正常。

全球.asax.cs

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{id}",
 new { id = "" }
);

重定向:

return parentController.RedirectToRoute("SharedError", new RouteValueDictionary(new { id = errorMessage.ToString() }));

共享控制器:

public ActionResult Error(String id)

如果您有一个默认路由接受一个值,那么 id 是所有路由都必须有的单词吗?

4

1 回答 1

5

你总是需要指定控制器和动作参数:

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{error}",
 new { controller = "Shared", action="Error", error = "" }
);

我猜想使用 id 对你有用的原因是因为你仍然注册了默认路由,它有 id 作为参数和控制器和操作的默认值。

请注意,如果您仍然有默认路由,请确保在它之前添加您的路由,否则它将首先匹配另一个。

于 2009-06-16T23:03:28.137 回答