【问题标题】:ASP.MVC 3 routing : how to get url with default action included?ASP.MVC 3 路由:如何获取包含默认操作的 url?
【发布时间】:2011-11-08 16:41:31
【问题描述】:

假设我有以下路由

routes.MapRoute(
   "Default", // Route name
   "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } );

现在,当您使用 Url.Action("Index","MyController") 生成 url 时,您将得到预期的结果:/MyController

但在一种特殊情况下,我想获取完整的 url /MyController/Index (不改变路由)...有谁知道这是否可能?

【问题讨论】:

  • 为什么需要完整的网址(我只是好奇)?
  • 我必须处理重要的情况......
  • 是的,但我想知道为什么?
  • 一种情况是:我有一个使用 url 导航的 silverlight 应用程序。索引是包含 Silverlight 标记的 html 的页面,添加到 url 的是一个包含要导航到的页面的片段:Controller/Index/#MyPage 显然 Controller/#MyPage 将不起作用......有时也会传递 url到 javascript 代码,其中 javascript 可能会在 url 中添加一些内容

标签: asp.net-mvc asp.net-mvc-routing


【解决方案1】:

这是可能的。但是你需要修改路由。

  1. 创建自己的路由类,派生Route
  2. 覆盖GetVirtualPath() 方法,为需要它的页面包含/index
  3. 改用您的路由类配置默认路由。

【讨论】:

  • 这没关系,但最后我决定在这些特定情况下将操作更改为编辑,并创建了一个重载的 Url.Action(我正在使用 T4MVC): public static string Action(this UrlHelper url, ActionResult 结果, 字符串片段) { return UrlHelper.GenerateUrl((string) null,(string) null,(string) null,(string) null,(string) null,fragment, result.GetRouteValueDictionary(), url.RouteCollection , url.RequestContext, true); }
【解决方案2】:

恐怕这是不可能的。这并不重要,因为两个 url 都将解析为相同的控制器操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    相关资源
    最近更新 更多