1

我不得不承认,我对 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>

我遇到的问题是服务器没有呈现 <%# %> 标记。如果我将相同的链接放入标签中,那么它就可以正常工作。我确信这与超链接已经在服务器端呈现的事实有关,但我不知道如何更改以使其正常工作。任何帮助将不胜感激。

4

2 回答 2

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");
}
于 2013-01-02T23:21:56.177 回答
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
于 2013-01-03T19:43:51.920 回答