我有一个必须回发的LinkButton才能执行某些逻辑。
一旦完成,我不想在浏览器中重新加载页面,而是想让它一个接一个地打开一个新窗口。
到目前为止,我最好的想法是将LinkButton放在UpdatePanel中,让它在重新加载时渲染一些JavaScript,但我认为这完全是hacky。此外,如果我没记错,更新面板中的JavaScript无论如何都不会运行。
还有其他想法吗?
答案 0 :(得分:6)
使用LinkButton.PostBackUrl将不同的页面设置为POST,并使用一些客户端脚本来获取新窗口(并恢复旧目标,以便将来的回发正常工作)。第二页可以使用PreviousPage从原始页面访问任何所需的状态。
<script runat="server">
void lnk_Click(object sender, EventArgs e) {
// Do work
}
</script>
<script type="text/javascript">
var oldTarget, oldAction;
function newWindowClick(target) {
var form = document.forms[0];
oldTarget = form.target;
oldAction = form.action;
form.target = target;
window.setTimeout(
"document.forms[0].target=oldTarget;"
+ "document.forms[0].action=oldAction;",
200
);
}
</script>
<asp:LinkButton runat="server" PostBackUrl="Details.aspx" Text="Click Me"
OnClick="lnk_Click"
OnClientClick="newWindowClick('details');" />
答案 1 :(得分:2)
以下是代码:
protected void Button1_Click(object sender, EventArgs e)
{
// Do some server side work
string script = "window.open('http://www.yahoo.com','Yahoo')";
if (!ClientScript.IsClientScriptBlockRegistered("NewWindow"))
{
ClientScript.RegisterClientScriptBlock(this.GetType(),"NewWindow",script, true);
}
}
答案 2 :(得分:1)
您可以尝试的一件事是让您的LinkButton OnClick事件执行其处理,然后使用弹出代码注册Page.ClientScript.RegisterStartupScript,这将在页面加载后将一些Javascript放入标记中以触发。这应该在处理完成后启动新窗口。
编辑:阅读您的评论,我相信您仍然可以使用此方法,将结果存储在会话变量中,然后让弹出页面从中拉出结果。