我不得不承认,我是一个相对较新的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;标签。如果我将相同的链接放入标签,那么它的工作正常。我确信它与已经在服务器端呈现超链接的事实有关,但我无法弄清楚如何更改事物以使其正常工作。任何帮助将不胜感激。
答案 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