6

MVC フレームワークでは、URL を作成するための Html クラスがあることを知っています。

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

しかし、Web フォームで URL を生成したい場合はどうすればよいでしょうか?

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/記事-タイトルなし

4

3 に答える 3

7

答えてくれてありがとう。これに追加するために、これが私がやったことです:

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 を作成

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
}

タダ!

于 2008-11-13T00:02:49.170 に答える
4

あなたが言うように、ASP.NET MVCは、RouteTableを「逆引き参照」してURLを生成するための一連のヘルパーメソッドを提供します。私はまだこれを試していませんが、私が見る限り、RouteCollection(おそらくRouteTable.Routes)でGetVirtualPathメソッドを呼び出す必要があります。だから次のようなもの:

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

RequestContextとRouteValueDictionaryを渡す必要があります。RouteValueDictionaryには、ルートパラメータが含まれています(この場合、county = "UK"、lang = "EN-GB"などです。これは通常のHttpContextの一部ではないため、トリッキーな部分はRequestContextです。これをプッシュできます。 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にあったことだけでした。

于 2008-11-11T16:14:27.383 に答える
-1

ハイパーリンク hl = new Hyperlink(); hl.Text = "ここをクリック"; hl.NavigateUrl="~/Forms/Article.aspx"; MostlyAnyControl.Controls.Add(hl);

リストに入れることについては...(1)ループ/反復、または(2)Linq to XMLのいずれかです。

于 2008-11-11T04:12:07.000 に答える