Frage

ich in der MVC-Framework kennen, haben Sie die HTML-Klasse URLs zu erstellen:

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

Aber was, wenn Sie Urls in Webforms generieren?

Ich habe nicht eine wirklich gute Ressource auf den Details gefunden URLs mit Webforms auf der Generierung.

Zum Beispiel, wenn ich zu erzeugen Routen wie folgt:

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

Wie würde ich URLs erzeugen mit Hilfe der Routing-Tabellendaten.

Wie erstelle ich URLS basierend auf meinen Strecken?

zB. / Ca / en / articles / 123 / Artikel-Titel ohne

War es hilfreich?

Lösung

Wie Sie sagen, bietet ASP.NET MVC eine Reihe von Hilfsmethoden „Reverse-Lookup“ der Routetable und eine URL für Sie generieren. Ich habe nicht mit so viel noch gespielt, aber soweit ich sehen kann, müssen Sie die GetVirtualPath Methode auf einem Routecollection (höchstwahrscheinlich RouteTable.Routes) nennen. So etwas wie:

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

Sie müssen die Request und eine Routevaluedictionary zu übergeben. Die Routevaluedictionary enthält die Routenparameter (so in Ihrem Fall so etwas wie Kreis = „UK“, lang = „EN-GB“ usw. Der schwierige Teil ist die Request, da dies nicht Teil der normalen Httpcontext ist. Sie es in die schieben können Httpcontext in Ihrem IRouteHandler:

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

und dann wieder aufrichten in Ihrem IHttpHandler (aspx Seite), wenn erforderlich:

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

Entschuldigt in VB zu einer C # Frage reagiert, es war nur, dass die ASP.NET-Routing-Seite, die ich an der Hand hatte, war in VB.NET.

Andere Tipps

Danke für die Antworten. Um diese zu Erweiterung, hier ist das, was ich getan habe:

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

Erstellen URL von Artikeln Objekt

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 () a zurück URL Zeigter Name .

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

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

TaDa!

Hyperlink hl = new Hyperlink (); hl.Text = "Hier klicken"; hl.NavigateUrl = "~ / Formulare / article.aspx"; MostlyAnyControl.Controls.Add (hl);

wie sie in einer Liste setzen ... entweder (1) Schleife / iterate, oder (2) Linq to XML.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top