为什么我的超链接在 GridView 项模板中无法正常工作 ASP.NET
本文关键字:常工作 工作 NET ASP 超链接 我的 GridView 为什么 | 更新日期: 2023-09-27 18:31:08
在我的GridView
里,我有这个:
<asp:TemplateField HeaderText="Issue">
<ItemTemplate>
<asp:HyperLink ID="EscalationHyperlink" runat="server" NavigateUrl='<%# EscalationGetNavigateUrl(Eval("ID")) %>' Text='<%# Eval("ID") %>'>
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
它不会在生成的GridView
中显示超链接。"文本"值是正确的,它只是不是超链接。此GridView
嵌入在UpdatePanel
中,由用户按下按钮生成。
如果我在里面设置了一个断点EscalationGetNavigateUrl()
它会在按下按钮时跳闸,它会返回格式正确的超链接,这很奇怪。
为了使事情更有趣,我到处都有这个确切的标记,它似乎在其他页面上工作正常,只是不是这个页面。
关于我可能出错的地方(或更好的调试方法)的任何想法?就像代码隐藏中生成的值没有以某种方式进入浏览器一样。
代码隐藏如下所示:
protected string EscalationGetNavigateUrl(object field)
{
return String.Format("~/EscalationDetails.aspx?EscalationId={0}", field);
}
编辑:我已经在下面的评论中说过这一点,但我想添加一些从服务器返回的输出。它看起来像这样:
<a id="MainContent_ClosedCREscGridView_EscalationHyperlink_0">175</a>
您会注意到链接上没有 href。
在我面前放着一瓶威士忌和一把上膛的左轮手枪几个小时后,我想出了问题所在。答案如下:
ClosedCREscGridView.Enabled = true;
仅仅让 GridView "可见"是不够的。您还必须使其"启用",HyperLink
NavigateURL功能才能在GridView
TemplateField
内工作。
希望这能在未来为其他人节省一些时间。
由于您正在调用一个方法而不是Eval()
此属性,因此您可以尝试:
<%= EscalationGetNavigateUrl(Eval("ID")) %>
这是一种强烈的预感,而不是 100% 这将起作用。
编辑:我花了一段时间才找到它。您正在使用的是数据绑定表达式。您可能需要的是一个显示表达式。
https://support.microsoft.com/kb/976112?wa=wsignin1.0
这是一个奇怪的问题,但您很幸运它适用于其他页面,因为您可以比较工作页面和非工作页面以找到差异。例如,它们是否都使用 DataView
?,是否都使用 asp:TemplateField
?,它们是否都是通过 updatepanel/回调生成的(而不是首次加载/回发)?等。
其他一些可以尝试的方法:
1) 将不属于更新面板且不在模板/数据视图中的页面添加 asp:HyperLink
控件,并确保其呈现正常。
2)尝试直接使用href
属性而不是通过NavigateUrl
来强制超链接,例如:
<asp:TemplateField HeaderText="Issue">
<ItemTemplate>
<asp:HyperLink ID="EscalationHyperlink" runat="server" href='<%# EscalationGetNavigateUrl(Eval("ID")) %>' Text='<%# Eval("ID") %>'>
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
3)如果你真的不需要超链接作为服务器控件(你可能不需要,因为它是动态的),你可以尝试直接呈现HTML如下:
<asp:TemplateField HeaderText="Issue">
<ItemTemplate>
<a href='<%# EscalationGetNavigateUrl(Eval("ID")) %>'><%# Eval("ID") %></a>
</ItemTemplate>
</asp:TemplateField>
诚然,#3 不是一个理想的解决方案,因为它应该可以正常工作,但它可能会为您提供其他结果进行比较,这可能有助于确定此页面上这种不稳定行为的原因。
关于调试:您可以在 DataView 的RowDataBound
处理程序中放置一个断点,设置NavigateUrl
,然后测试它是否实际设置。如果看起来不错,那么您还可以在某些GetCallbackResult
和Unload
处理程序中存根,在每个处理程序中设置断点,并从这些处理程序中检查NavigateUrl
值。