ASP.NET 4 ДОСТУПНЫЕ ДАННЫЕ ДЛЯ ОБРАЩЕНИЯ В NavigateUrl - PullRequest
1 голос
/ 03 декабря 2010

В настоящее время я изучаю .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.

Ответы [ 3 ]

1 голос
/ 03 декабря 2010

Вы не должны использовать # в и писать <% в NavigateURL. </p>

Следуйте следующему примеру

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

0 голосов
/ 10 мая 2011

Я делаю так

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

0 голосов
/ 03 декабря 2010

Вместо того, чтобы делать всю работу во внешнем интерфейсе, почему бы не поместить построение URL в код позади?

В передней части:

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

В коде позади:

публичная строка BuildURL (строка a, строка b, строка c) { / * Конкатенировать строку с помощью строителя строк и вернуть * /}

Вам все равно придется связывать элемент управления. Каждый раз, когда привязывается ссылка, метод вызывается с соответствующими значениями, и завершенная строка возвращается в NavigateURL.

...