【问题标题】:ASP.Net MVC: So wait... The Default Route Parameter Has To Be Named id?ASP.Net MVC:等等……默认路由参数必须命名为 id?
【发布时间】:2009-06-16 22:56:00
【问题描述】:

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

所以我正在为这样的错误设置路由:

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”这个词替换所有这些,一切正常。

Global.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 是所有路由都必须有的词吗?

【问题讨论】:

    标签: asp.net-mvc routes


    【解决方案1】:

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

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

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

    注意,如果你还有默认路由,请确保在之前添加你的路由,否则它会先匹配另一个。

    【讨论】:

    • 对,但应该是新的 { controller="Shared", action="Error", error = "" }
    • 已更正(尽管我认为 OP 没有提到他的控制器名称)。
    • @programmin:如果那是您的问题,请在最后查看我的说明。
    • 还要确保你正确设置了控制器和动作,在这个例子中我只是做了它们
    • 啊,你的笔记可能就是它。检查。
    猜你喜欢
    • 2012-09-12
    • 2020-10-23
    • 2010-11-01
    • 1970-01-01
    • 2015-09-22
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多