4

ASP.NET 4 (MVC ではなく Web フォーム) の新しいルーティング機能を使用しています。これで、データソースにバインドされた asp:ListView ができました。プロパティの 1 つはClientID、ListView アイテムから別のページにリンクするために使用したいです。でglobal.asaxルートを定義しました:

System.Web.Routing.RouteTable.Routes.MapPageRoute("ClientRoute",
    "MyClientPage/{ClientID}", "~/Client.aspx");

たとえばhttp://server/MyClientPage/2、ClientID=2 が存在する場合は有効な URL です。

ListView 項目には、リンクを作成できるように asp:HyperLink があります。

<asp:HyperLink ID="HyperLinkClient" runat="server" 
    NavigateUrl='<%# "~/MyClientPage/"+Eval("ClientID") %>' >
    Go to Client details
</asp:HyperLink>

これは機能しますが、RouteUrl 式を使用して、ハードコーディングされたルートの代わりに RouteName を使用することをお勧めします。たとえば、定数 ClientID=2 を使用すると、次のように書くことができます。

<asp:HyperLink ID="HyperLinkClient" runat="server" 
    NavigateUrl="<%$ RouteUrl:ClientID=2,RouteName=ClientRoute %>" >
    Go to Client details
</asp:HyperLink>

今、ルート式の構文とデータバインディングの構文を組み合わせることができるかどうか疑問に思っています。2基本的に、上記の定数を に置き換えるのが好き<%# Eval("ClientID") %>です。しかし、これを素朴な方法で行う...

<asp:HyperLink ID="HyperLinkClient" runat="server" 
    NavigateUrl='<%$ RouteUrl:ClientID=<%# Eval("ClientID") %>,RouteName=ClientRoute %>' >
    Go to Client details
</asp:HyperLink>

... は機能しません:<%# Eval("ClientID") %>は評価されませんが、文字列と見なされます。いくつかのフレーバーの引用符をいじっても、これまでのところ役に立ちませんでした (ほとんどの場合、パーサー エラー)。

質問: 私がここで達成しようとしていることはまったく可能ですか? はいの場合、正しい方法は何ですか?

前もって感謝します!

4

2 に答える 2

13

System.Web.UI.Control.GetRouteUrlを使用します。

VB:

<asp:HyperLink ID="HyperLinkClient" runat="server"  
    NavigateUrl='<%# GetRouteUrl("ClientRoute", New With {.ClientID = Eval("ClientID")}) %>' > 
    Go to Client details 
</asp:HyperLink>

C#:

<asp:HyperLink ID="HyperLinkClient" runat="server"  
    NavigateUrl='<%# GetRouteUrl("ClientRoute", new {ClientID = Eval("ClientID")}) %>' > 
    Go to Client details 
</asp:HyperLink>
于 2010-06-06T13:51:57.663 に答える
1

基本的にはサム ランのソリューションと同じですが、.net コントロールを使用する代わりに、通常の HTML アンカー コントロールを使用できます。

<a href='<%# GetRouteUrl("ClientRoute", new {ClientID = Eval("ClientID")}) %>'> 
     Go to Client details
</a>
于 2014-08-08T08:09:40.190 に答える