2010-04-23 53 views
0

我用这样的存储链接到ASP.NET MVC内部内容页

 routes.MapRoute(
      "PageBySlug", 
      RouteType.Regular, 
      "{slug}", 
      new {controller = "Page", action = "Display", slug = "Default"}, null 
      ); 

路由映射请求〜/一些页,弹头到〜/页/显示/有些页-Slug。

当添加内容时,用户可以选择链接到现有页面创建的引用,然后我存储在这种格式在数据存储中的链接:“/一些页 - 弹头”。

当我在卡西尼运行应用程序,并从数据存储中拉出链接并将其附加到A标签时,它看起来像这样http://localhost:93229/Some-Page-Slug,并且此链接有效。

但是,当在IIS中的某个网站下的虚拟目录中运行应用程序时,附加的链接生成此URL http://localhost/Some-Page-Slug,它应该是http://localhost/virtualdir/Some-Page-Slug

当然,这会产生404错误。

我该如何解决这个问题,以便在所有情况下都能普遍有用?我应该以不同的方式将其存储在数据库中,还是应该在运行时将其转换为正确的形式,以及如何执行此操作?

回答

1

我找到了一个解决方案已经:

RouteValueDictionary routeValues = new RouteValueDictionary 
              { 
               {"slug", Html.Encode(Model.Url)} 
              }; 
// the commented lines work in IIS but not is ASP.NET builtin server   
//string url = UrlHelper.GenerateUrl("PageBySlug", "Display", "Page", routeValues, RouteTable.Routes, 
//Request.RequestContext, true); 
string url = Url.Content("~/" + Html.Encode(Model.Url)); // this works in both 

如果你有其他的建议,他们欢迎!