1

私は現在 .net を学んでおり、URL のルーティングを実装しようとしてレンガの壁にぶつかっています。

ほとんどが正常に動作していますが、データベース内の情報からハイパーリンクを生成しようとしています。

次を使用してデータを正常に取得しています:

    'portfolio navigation data
    Dim rdrPortfolioNav As SqlDataReader

    Dim cmdPortfolioNav As SqlCommand = New SqlCommand()
    cmdPortfolioNav.CommandText = "SELECT TOP 6 [id], [date], [client], [category], [title], [body], [website], [navimage], [navdesc] FROM [portfolio] ORDER BY [date] DESC"
    cmdPortfolioNav.CommandType = CommandType.Text
    cmdPortfolioNav.Connection = boomSQL

    cmdPortfolioNav.Connection.Open()
    rdrPortfolioNav = cmdPortfolioNav.ExecuteReader(CommandBehavior.CloseConnection)

    lvPortfolioNav.DataSource = rdrPortfolioNav
    lvPortfolioNav.DataBind()

    cmdPortfolioNav.Dispose()

フロントエンドでは、次を使用してデータにアクセスし、すべてのレコードを表示できます。

<asp:ListView ID="lvPortfolioNav" runat="server">
<ItemTemplate>
    <div class="work">
        <asp:HyperLink runat="server" NavigateUrl="portfolio/<%# DataBinder.Eval(Container.DataItem, &quot;id&quot;)%>/<%# FormatLinks(DataBinder.Eval(Container.DataItem, &quot;category&quot;)) %>/<%# FormatLinks(DataBinder.Eval(Container.DataItem, &quot;title&quot;)) %>" ToolTip=""><span class="title"><%# DataBinder.Eval(Container.DataItem, "title")%></span></asp:HyperLink>
        <asp:Image runat="server" ImageUrl="<%# DataBinder.Eval(Container.DataItem, &quot;navimage&quot;)%>" AlternateText="<%# DataBinder.Eval(Container.DataItem, &quot;client&quot;)%>" ToolTip="<%# DataBinder.Eval(Container.DataItem, &quot;client&quot;)%>" />
        <span class="desc"><%# DataBinder.Eval(Container.DataItem, "navdesc")%></span> </div>
</ItemTemplate>

問題は次の行です。

<asp:HyperLink runat="server" NavigateUrl="portfolio/<%# DataBinder.Eval(Container.DataItem, &quot;id&quot;)%>/<%# FormatLinks(DataBinder.Eval(Container.DataItem, &quot;category&quot;)) %>/<%# FormatLinks(DataBinder.Eval(Container.DataItem, &quot;title&quot;)) %>" ToolTip=""><span class="title"><%# DataBinder.Eval(Container.DataItem, "title")%></span></asp:HyperLink>

データベースから値を取得せず、html ではリンクは文字通り次のようになります。

<a href="../../portfolio/%3C%25#%20DataBinder.Eval(Container.DataItem,%20%22id%22)%25%3E/%3C%25%23%20FormatLinks(DataBinder.Eval(Container.DataItem,%20%22category%22))%20%25%3E/%3C%25%23%20FormatLinks(DataBinder.Eval(Container.DataItem,%20%22title%22))%20%25%3E"><span class="title">Kingston Bagpuize House Website</span></a>

同じことが ImageUrl でもうまくいくので、何が間違っているのかわかりません。

URLを生成するためにバックエンドコードで何かできることは知っていますが、私は一生インターネット上で何かを見つけることができません....助けていただければ幸いです。

ありがとう。

J.

4

3 に答える 3

1

# を使用して、NavigateURL に <% を記述しないでください。

次の例に従ってください

http://www.extremeexperts.com/Net/FAQ/PassingMultipleParameterinURLLink.aspx

于 2010-12-03T18:30:00.343 に答える
0

私はこのようにします

NavigateUrl= '<%#"~/ProductList.aspx?ITEMSUBCATID=" + DataBinder.Eval(Container.DataItem, "ITEMSUBCATID")%>'

于 2011-05-10T13:43:25.943 に答える
0

すべての作業をフロント エンドで行うのではなく、URL 構築をコード ビハインドに入れてみませんか?

フロントエンド:

NavigateUrl='<%# this.BuildURL(DataBinder.Eval(Container.DataItem, "id"),DataBinder.Eval(Container.DataItem, "category"), DataBinder.Eval(Container.DataItem, "title"))'

コードビハインド:

public string BuildURL(string a, string b, string c){ /* 文字列ビルダーを使用して文字列を連結し、返す */}

コントロールをバインドする必要があります。リンクがバインドされるたびに、メソッドが適切な値で呼び出され、完成した文字列が NavigateURL に返されます。

于 2010-12-03T20:20:49.803 に答える