我们一直在尝试在ASP.NET MVC Web应用程序上实现短代码,允许用户使用指定的短代码唯一地调用给定的文章/页面。
例如:www.mysite.com/power将映射到实际网址:www.mysite.com/Power/Home /.
我在整个站点中创建了各种路径,将这些短代码映射到应用程序中的各种操作和控制器。从短代码/路线的角度来看,一切都很好。
然而,我注意到了一些有趣的事情。我有超链接,我使用Url.Action方法生成URL指向页面。其中许多页面也有与之相关的短代码。例如:我有一个链接说: <a href="<%= Url.Action("Index", "Home", new { Area = "Power" })%>"> Go to Power page</a>
这是一个页面,也有前面提到的短代码。当我使用Url.Action时,理想情况下我希望它创建一个链接为/ Power / Home / Index或/ Power / Home,但由于我也有映射到它的路由约束,它现在生成链接为/ power。 / p>
有没有办法在生成链接时可以使用实际的链接URL?我发送电子邮件等时只需要短代码。我希望网站生成实际的网址。
这可能是也可能是不可能的,但我想看看是否有任何我可以使用的想法。
阿努普
答案 0 :(得分:0)
Index和Home可能在路由表中定义为Action和Controller元素的默认值。生成Url时,如果不需要,则不会包含默认值。
答案 1 :(得分:0)
您可以编写自己的Action重载或帮助程序,这样您就可以更直接地控制生成的URL或操作链接。您可以通过两种不同的方式来处理它:1)生成短代码特定URL和链接的帮助程序,和/或2)生成完整URL和/或链接的帮助程序。如果Url.Action由于您的路由配置而返回短代码版本,我认为一个好的起点是第二个选项,创建一个帮助/扩展方法,为您生成完整的URL。
答案 2 :(得分:0)
以下是我解决这个问题的方法:
我没有使用短代码命名路由来指向操作网址,而是将路由指向另一个Controller操作,然后该操作将重定向到我想要的实际路由。
例如:最初我在路由表中定义了代码“power”,它指向www.mysite.com/Power/Home。
现在不是将其指向该动作 - 索引,控制器 - 主页,区域 - 电源,我决定:动作 - 电源,控制器 - 主页,区域 - ShortCode。
现在在控制器中,我只是做一个RedirectToAction(“Index”,“Home”,new {Area =“Power”});
这可确保指向/ Power / Home的实际链接无法解析为短代码“power”。
这是一个简单的修复工作,增加了一点点的工作,但工作就像一个魅力。