ASP.NET Web 表单中如何在不刷新当前页面的情况下单击打开另一个选项卡?
How to open another tab on click without refresh current page in ASP.NET Web Forms?
我希望能够单击一个按钮,该按钮在单击时会打开另一个选项卡。在我的例子中,这是使用两个 ASP.Net
控件完成的,一个 asp literal
带有 <form>
标签,将其格式化为提交按钮,因为我需要它具有一些 POST
功能。 asp literal
中的代码如下所示:
<input type='submit' id='openWindowButton' value = 'Open window'>
使用给定的 URL
和 _blank
打开新标签页。
我正在使用另一个 asp 控件,这次是 LinkButton
,以 运行 单击事件,并触发单击提交 asp literal
和 javascript
代码。它看起来像这样:
<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 填充文字然后单击它,文字打开一个选项卡。唯一的问题是页面重新加载,我想避免这种行为。
我已经在脚本末尾尝试了 return false,但是如果我只从 javascript 方法中使用 return 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 文字,页面不会刷新,但我收到一条错误消息说
Uncaught TypeError: Cannot read property 'click' of null.
我猜这是因为页面没有重新加载,并且 asp literal
文本在点击操作发生时没有加载到页面中。
如何停止页面的重新加载,并仍然保持这些按钮的相同功能?
此致!
编辑
我注意到 asp literal
中的提交按钮不会重新加载表单,因为简单的手动单击它只会打开新选项卡。所以在这种情况下的主要问题只是让 asp LinkButton
不触发页面重新加载。
在 .cs 文件中,我使用此方法注册我的脚本,以便在单击 LinkButton 后 运行ned,正如 asp.net forum:
上的建议
RegisterStartupScript(Page page, Type type, string key, string script, bool addScriptTags)
在我意识到我使用了错误的 ScriptManager.RegisterStartupScript
重载后,这个问题得到了解决。我使用的是将页面作为第一个参数的方法(可以找到here),然后我尝试使用将页面作为参数的方法
The control that is registering the client script block
如 msdn 文档中所述,并作为 LinkButton 控件发送,它确实有效。该页面不再重新加载。我希望这可以帮助遇到同样问题的人。
我希望能够单击一个按钮,该按钮在单击时会打开另一个选项卡。在我的例子中,这是使用两个 ASP.Net
控件完成的,一个 asp literal
带有 <form>
标签,将其格式化为提交按钮,因为我需要它具有一些 POST
功能。 asp literal
中的代码如下所示:
<input type='submit' id='openWindowButton' value = 'Open window'>
使用给定的 URL
和 _blank
打开新标签页。
我正在使用另一个 asp 控件,这次是 LinkButton
,以 运行 单击事件,并触发单击提交 asp literal
和 javascript
代码。它看起来像这样:
<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 填充文字然后单击它,文字打开一个选项卡。唯一的问题是页面重新加载,我想避免这种行为。
我已经在脚本末尾尝试了 return false,但是如果我只从 javascript 方法中使用 return 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 文字,页面不会刷新,但我收到一条错误消息说
Uncaught TypeError: Cannot read property 'click' of null.
我猜这是因为页面没有重新加载,并且 asp literal
文本在点击操作发生时没有加载到页面中。
如何停止页面的重新加载,并仍然保持这些按钮的相同功能? 此致!
编辑
我注意到 asp literal
中的提交按钮不会重新加载表单,因为简单的手动单击它只会打开新选项卡。所以在这种情况下的主要问题只是让 asp LinkButton
不触发页面重新加载。
在 .cs 文件中,我使用此方法注册我的脚本,以便在单击 LinkButton 后 运行ned,正如 asp.net forum:
上的建议RegisterStartupScript(Page page, Type type, string key, string script, bool addScriptTags)
在我意识到我使用了错误的 ScriptManager.RegisterStartupScript
重载后,这个问题得到了解决。我使用的是将页面作为第一个参数的方法(可以找到here),然后我尝试使用将页面作为参数的方法
The control that is registering the client script block
如 msdn 文档中所述,并作为 LinkButton 控件发送,它确实有效。该页面不再重新加载。我希望这可以帮助遇到同样问题的人。