ASP.NET 4访问数据应用于NavigateUrl

时间:2010-12-03 17:41:03

标签: asp.net vb.net asp.net-4.0 vb.net-2010

我目前正在学习.net,并试图实施网址报告。“/ p>

我的大部分工作正常,但我正在尝试根据数据库中的信息生成超链接。

我使用以下方法获取数据:

    '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工作正常,所以不确定我做错了什么。

我知道你可以在后端代码中做一些事情来生成网址,但是我无法在互联网上找到任何东西......帮助会非常感激。

感谢。

学家

3 个答案:

答案 0 :(得分:1)

您不应该使用#in并在NavigateURL中写入&lt;%。

请遵循以下示例

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

答案 1 :(得分:0)

为什么不将URL构建在代码中呢?

而不是在前端完成所有工作

前端:

NavigateUrl ='&lt;%#this.BuildURL(DataBinder.Eval(Container.DataItem,“id”),DataBinder.Eval(Container.DataItem,“category”), DataBinder.Eval(Container.DataItem,“title”))'

在codebehind中:

public string BuildURL(string a,string b,string c){ / *使用字符串构建器连接字符串并返回* /}

您仍然必须绑定控件每次绑定链接时,将使用适当的值调用方法,并且完成的字符串将返回到NavigateURL。

答案 2 :(得分:0)

我这样做

NavigateUrl ='&lt;%#“〜/ ProductList.aspx?ITEMSUBCATID =”+ DataBinder.Eval(Container.DataItem,“ITEMSUBCATID”)%&gt;'