【发布时间】:2016-06-23 10:48:45
【问题描述】:
我希望能够单击一个按钮,该按钮会在单击时打开另一个选项卡。就我而言,这是使用两个ASP.Net 控件完成的,一个带有<form> 标签的asp literal 将其格式化为提交按钮,因为我需要它具有一些POST 功能。 asp literal 中的代码如下所示:
<input type='submit' id='openWindowButton' value = 'Open window'>
使用给定的URL 和_blank 打开新标签。
我正在使用另一个 asp 控件,这次是 LinkButton,在单击时运行事件,并且还使用 javascript 代码触发对提交 asp literal 的单击。它看起来像这样:
<asp:LinkButton ID="literalID" OnClick="DoStuff" runat="server">Do stuff</asp:LinkButton>
在DoStuff 事件上,我需要运行一些代码,用上面提到的代码填充asp literal,完成后,它触发点击带有openWindowButton ID 的提交按钮,如下所示:
function InvokeReportFormClick() {
document.getElementById("openWindowButton").click();
return false;
}
点击代码是用ScriptManager.RegisterStartupScript方法添加的。
以这种方式一切正常,LinkButton 填充文字,然后单击它,文字打开一个选项卡。唯一的问题是页面被重新加载,我想避免这种行为。
我已经尝试在脚本末尾返回false,但是如果我只从javascript方法返回false,如上所示,页面仍然重新加载,我认为这是因为asp literal上生成的点击.
我可以在asp literal 输入的 onclick 事件上添加 return false,如下所示:
<input type='submit' id='openWindowButton' value = 'Open window' onclick="return false;">
但它停止打开我需要的标签。
我还尝试将asp:Linkbutton 放在UpdatePanel 控件中,如本示例所示:
<asp:ScriptManager runat="server" ID="reportScriptManager">
</asp:ScriptManager>
<asp:UpdatePanel ID="updatePanelID" runat="server">
<ContentTemplate>
<asp:LinkButton ID="literalID" OnClick="DoStuff" runat="server">Do stuff</asp:LinkButton>
</ContentTemplate>
</asp:UpdatePanel>
但它仍然刷新页面,因为我仍然从asp literal 点击猜测。如果我在 LinkButton 旁边添加 asp 文字,页面不会刷新,但我收到一个错误提示
未捕获的类型错误:无法读取 null 的属性“单击”。
我猜这是因为页面没有重新加载,并且当点击操作发生时,asp literal 文本没有加载到页面中。
如何停止重新加载页面,同时保持这些按钮的相同功能? 最好的问候!
编辑
我已经注意到由asp literal 制作的提交按钮不会重新加载表单,因为简单的手动单击它只会打开新选项卡。所以这种情况下的主要问题只是让aspLinkButton不触发页面重新加载。
在 .cs 文件中,我使用此方法注册要在单击 LinkButton 后运行的脚本,正如 asp.net forum 所建议的那样:
RegisterStartupScript(Page page, Type type, string key, string script, bool addScriptTags)
【问题讨论】:
-
我认为这个问题是因为你让事件冒泡 - 请参阅:stackoverflow.com/questions/25092840/…
-
@MerlynMorgan-Graham 感谢您的回复,我已尝试对两个按钮使用阻止默认值,但没有成功,页面仍在重新加载
标签: javascript c# asp.net page-refresh