服务器标记未在asp:Hyperlink中解析

时间:2013-01-02 22:41:21

标签: asp.net server-tags servertag

我不得不承认,我是一个相对较新的ASP.NET,可耻地还没有在客户端页面上真正使用过服务器标签。我的页面上有一个转发器,它遍历数据表的行,并使用下面的标记显示每个项目的超链接对象:

<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/DiseaseInfo/Syndrome.aspx?SyndromeID=<%# Eval('SYNDROME_ID')%>&SpeciesID=<%# Eval('SPECIES_ID')%>" Text='<%# Eval("SYNDROME_NAME").ToString%>'></asp:HyperLink>

我遇到的问题是服务器没有渲染出&lt;%#%&gt;标签。如果我将相同的链接放入标签,那么它的工作正常。我确信它与已经在服务器端呈现超链接的事实有关,但我无法弄清楚如何更改事物以使其正常工作。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

颠倒单/双引号的顺序。

<asp:HyperLink runat="server" NavigateUrl='~/DiseaseInfo/Syndrome.aspx?
  SyndromeID=<%# Eval("SYNDROME_ID")%>&SpeciesID=<%# Eval("SPECIES_ID")%>'
  Text='<%# Eval("SYNDROME_NAME").ToString()%>'>
</asp:HyperLink>

这通常在JavaScript / HTML级别无关紧要,但C#/ VB的正确引号是双引号,应在Eval()方法中使用。

稍微好一点的方法是调用一个方法来返回这个有点复杂的url:

<asp:HyperLink runat="server" NavigateUrl='<%# GetUrl() %>' />

protected string GetUrl()
{
    return string.format("Syndrome.aspx?SyndromeID={0}...", Eval("SYNDROME_ID");
}

答案 1 :(得分:0)

以下是我最终处理此问题的方法:

Public Sub Repeater2_ItemDataBound(sender As Object, e As RepeaterItemEventArgs)
    If (e.Item.ItemType = ListItemType.Item) Or (e.Item.ItemType = ListItemType.AlternatingItem) Then
        Dim SpeciesID As String = CType(e.Item.DataItem, System.Data.DataRowView)("SPECIES_ID").ToString
        Dim DiseaseID As String = CType(e.Item.DataItem, System.Data.DataRowView)("DISEASE_ID").ToString
        Dim DiseaseName As String = CType(e.Item.DataItem, System.Data.DataRowView)("DISEASE_NAME").ToString
        Dim Hyperlink = CType(e.Item.FindControl("Hyperlink1"), HyperLink)

        Hyperlink.NavigateUrl = String.Format("~/DiseaseInfo/Disease.aspx?DiseaseID={0}&SpeciesID={1}", DiseaseID, SpeciesID)
        Hyperlink.Text = DiseaseName
    End If
End Sub