Создать URL-адрес с помощью URL-маршрутизации в веб-формах - PullRequest
6 голосов
/ 11 ноября 2008

Я знаю, что в MVC Framework у вас есть класс Html для создания URL:

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

Но что, если вы хотите генерировать URL-адреса в веб-формах?

Я не нашел действительно хорошего ресурса по деталям создания 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 / Заголовок статьи без

Ответы [ 3 ]

7 голосов
/ 13 ноября 2008

Спасибо за ответы. Чтобы добавить к этому, вот что я сделал:

В 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);       

Создать URL из объекта Article

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
}

TaDa!

4 голосов
/ 11 ноября 2008

Как вы говорите, ASP.NET MVC предлагает вам набор вспомогательных методов для "обратного просмотра" RouteTable и генерации URL для вас. Я пока еще не играл с этим, но, насколько я вижу, вам нужно вызвать метод GetVirtualPath для RouteCollection (скорее всего RouteTable.Routes). Так что-то вроде:

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

Вам необходимо передать RequestContext и RouteValueDictionary. RouteValueDictionary содержит параметры маршрута (поэтому в вашем случае что-то вроде county = "UK", lang = "EN-GB" и т. Д. Сложная часть - это RequestContext, поскольку он не является частью обычного HttpContext. HttpContext в вашем IRouteHandler:

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

Извиняюсь за ответ на вопрос C # в VB, просто сайт маршрутизации ASP.NET, который я должен был передать, был в VB.NET.

0 голосов
/ 11 ноября 2008

гиперссылка hl = новая гиперссылка (); hl.Text = "нажмите здесь"; hl.NavigateUrl = "~ / Формы / Article.aspx"; MostlyAnyControl.Controls.Add (гл); * * тысяча один

что касается помещения его в список ... либо (1) цикл / итерация, либо (2) Linq to XML.

...