我知道在视的框架,你有Html类,以创建网址:

Html.ActionLink("About us", "about", "home");

但是,如果你要生成的网址在web表单?

我还没有找到一个很好的资源的详细信息生成网址与web表单.

例如,如果我产生的路线,像这样:

Route r = new Route("{country}/{lang}/articles/{id}/{title}",
                  new ArticleRouteHandler("~/Forms/Article.aspx"));
Route r2 = new Route("{country}/{lang}/articles/",
                  new ArticleRouteHandler("~/Forms/ArticlesList.aspx"));

Routes.Add(r);
Routes.Add(r2);

我怎么会生成的网址使用路由表的数据。

我如何生成的网址根据我的路?

例如。/ca/en/articles/123/文章-标题没有

有帮助吗?

解决方案

就像你说的,ASP.NET 视为您提供一套辅助方法,"反向查找"的RouteTable和产生的URL你。我已经不玩了这么多但是我可以看看你需要叫GetVirtualPath方法上的RouteCollection(最有可能RouteTable.路线).所以是这样的:

Dim routedurl = RouteTable.Routes.GetVirtualPath(context, rvd).VirtualPath

你需要通过RequestContext和RouteValueDictionary.该RouteValueDictionary包含的路线参数(所以你的情况喜欢的东西县="UK",lang="EN-GB"等。最棘手的部分是RequestContext,因为这是不正常部分的HttpContext.你可以把它推入HttpContext在你IRouteHandler:

requestContext.HttpContext.Items("RequestContext") = requestContext

然后再恢复它再次在你该(aspx页)当需要:

Dim rvd = 
  New RouteValueDictionary(New With {.country = "UK", .lang = "EN-GB"})
Dim routedurl = 
  RouteTable.Routes.GetVirtualPath(context.Items("RequestContext"), rvd).VirtualPath

抱歉回应C#问题在VB,那只是,ASP.NET 路由现场我不得不手中VB.NET.

其他提示

谢谢你的答案。加入到这个,这里是我做了什么:

在全球性的。asax

RouteValueDictionary rvdSiteDefaults 
    = new RouteValueDictionary { { "country", "ca" }, { "lang", "en" } };

Route oneArticle 
    = new Route("{country}/{lang}/articles/a{id}/{title}",
        rvdSiteDefaults,
        rvdConstrainID,
        new ArticleRouteHandler("~/Articles/Details.aspx"));

Routes.Add( "Article", oneArticle);       

创建网址,从文章对象

public static string CreateUrl(Article a) {
    // Note, Article comes from Database, has properties of ArticleID, Title, etc.
    RouteValueDictionary parameters;

    string routeName = "Article"; // Set in Global.asax

    parameters 
      = new RouteValueDictionary { 
         { "id", a.ArticleID }, 
         { "title", a.Title.CleanUrl() } 
        }; 

CleanUrl() 返回URL友好的名字.

    VirtualPathData vpd = RouteTable.Routes.GetVirtualPath(null, routeName, parameters);

    string url = vpd.VirtualPath; 
    return url; // eg. /ca/en/1/The-Article-Title
}

多田!

超级链接hl=新的超链接();hl.Text="click here";hl.NavigateUrl="~/Forms/文章。aspx";MostlyAnyControl.控制。添加(hl);

至于把它放在一个列表...(1)循环/迭代,或者(2)皇宫于XML。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top