在Webforms中生成带URL路由的URL
我知道在MVC框架中,你有Html类来创建URL:
Html.ActionLink("About us", "about", "home");
但是如果你想在Webforms中生成Urls呢?
我没有找到关于使用Webforms生成URL的详细信息。
例如,如果我正在生成这样的路线:
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);
如何使用路由表数据生成URL。
如何根据我的路线生成URL?
例如。 / ca / en / articles / 123 /文章标题没有
正如您所说,ASP.NET MVC为您提供了一组辅助方法来“反向查找”RouteTable并为您生成URL。 我还没玩过这么多,但据我所知,你需要在RouteCollection上调用GetVirtualPath方法(很可能是RouteTable.Routes)。 所以类似于:
Dim routedurl = RouteTable.Routes.GetVirtualPath(context, rvd).VirtualPath
您需要传递RequestContext和RouteValueDictionary。 RouteValueDictionary包含路由参数(所以在你的情况下类似于county =“UK”,lang =“EN-GB”等。棘手的部分是RequestContext,因为它不是普通HttpContext的一部分。你可以将它推入IRouteHandler中的HttpContext:
requestContext.HttpContext.Items("RequestContext") = requestContext
然后在需要时在IHttpHandler(aspx页面)中再次恢复它:
Dim rvd = New RouteValueDictionary(New With {.country = "UK", .lang = "EN-GB"}) Dim routedurl = RouteTable.Routes.GetVirtualPath(context.Items("RequestContext"), rvd).VirtualPath
在VB中回应C#问题的道歉,只是我必须提供的ASP.NET路由站点在VB.NET中。
谢谢你的回答。 再补充一点,这就是我所做的:
在Global.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);
从Article对象创建Url
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 }
田田!
Hyperlink hl = new Hyperlink(); hl.Text =“点击这里”; hl.NavigateUrl = “〜/表格/ Article.aspx”; MostlyAnyControl.Controls.Add(HL);
至于把它放在一个列表中……要么(1)循环/迭代,要么(2)Linq到XML。