我正试图在单击asp-gridview的超链接字段时执行一些javascript。javascript执行得很好,但当iframe在显示之前闪烁时,页面会向后发布(javascript只是简单地将iframe的源代码和显示从none设置为block。)。既然这个控件没有这样的属性,我该如何禁用它的autopostback?
<Columns>
<asp:hyperlinkfield Text="Update"
NavigateUrl="javascript:ShowForm('frmAddAudits.aspx');"
HeaderText="Update"
target="_blank"/>
<asp:hyperlinkfield Text="Add Findings"
NavigateUrl="javascript:ShowForm('frmAuditFindings.aspx');"
HeaderText="Add Findings"
target="_blank" />
</Columns>
CSS
.ShowMe{display:block;}
.HideMe{display:none;}
Javascript
function ShowForm(urlToGoTo){
document.getElementById('myiFrame').src = urlToGoTo;
document.getElementById('myiFrame').className = "ShowMe";
}
尝试使用TemplateFiled和锚标记,如下所示:
<Columns>
<asp:TemplateField>
<ItemTemplate>
<a href="#" onclick="javascript:ShowForm('frmAddAudits.aspx');return false;">
</ItemTemplate>
</asp:TemplateField>
如果需要,可以设置runat="server"
并为其提供ID
在javascript事件处理程序中添加return false
,这样浏览器就不会继续单击操作,在本例中是回发。
当然,理想情况下,您不会使用<asp:HyperlinkField>
。您是否考虑过使用<a runat="server">
?
NavigateUrl="javascript:ShowForm('frmAddAudits.aspx');return false"
在标记中尝试此NavigateUrl属性
NavigateUrl="javascript:ShowForm('frmAddAudits.aspx');return false;"
此外,您还可以尝试基本的HTML锚标记和javascript来打开新窗口。
看看如果你没有对这些超链接的回发做任何事情,那么绘制服务器端控制的目的是什么。
这些会影响在网页上渲染时的性能。所以我建议你使用<a>
来读取这些超链接字段
您可以使用:
<a href="#" onclick="javascript:ShowForm('frmAddAudits.aspx');return false;">
在这种情况下,Postback永远不会发生,与byperlinkfield相比,它减少了渲染时间和内存成本。