我有一个asp.net页面,其中包含嵌入了一些数据和ImageButton的Iframe。在ImageButton上单击事件(服务器端)我有Response.Redirct:
Response.Redirect("results.aspx");
这总是在iframe中打开results.aspx。我希望results.aspx应该始终在父窗口中打开。我到目前为止尝试了以下但没有效果:
Response.Redirect("<script language='javascript'>self.parent.location='results.aspx';</script>");
Response.Redirect("javascript:parent.change_parent_url('results.aspx');");
作为Rifk的回应,我添加了ClientScriptManager。 .aspx有这个条目:
<asp:ImageButton ID="ImageButton_ok" ImageUrl="~/images/ok.gif"
OnClick="btnVerify_Click" OnClientClick="ValidateFields()"
runat="server" />
Page_Load()中的代码:
ClientScriptManager cs = Page.ClientScript;
StringBuilder myscript = new StringBuilder();
myscript.Append("<script type=\"text/javascript\"> function ValidateFields() {");
myscript.Append("self.parent.location='default.aspx';} </");
myscript.Append("script>");
cs.RegisterClientScriptBlock(this.GetType(), "ButtonClickScript", myscript.ToString());
btnVerify_Click具有主要业务逻辑。如果我的业务逻辑失败,我将如何停止OnClientClick()触发?或者,如何在成功执行服务器端代码时触发?
答案 0 :(得分:8)
如果是在服务器端进行重定向的页面,Response.Redirect将仅影响iFrame中的页面。您希望在该iFrame中运行一些javascript,它将重定向父级,就像您在第二个示例中所做的那样。为了运行脚本,您不应该使用Response.Redirect(),而是应该注册客户端脚本。
请参阅以下链接,了解如何在ASP.Net 2.0中的代码中注册客户端脚本 - Using Javascript with ASP.Net 2.0
例如,您可以在事件结束时添加与此类似的内容,以处理ImageButton Click:
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "myUniqueKey",
"self.parent.location='results.aspx';", true);
答案 1 :(得分:2)
我有一个asp.net页面,其中包含嵌入了一些数据和按钮的Iframe。在按钮单击事件(服务器端)上我有Response.Redirct,但我需要关闭Iframe并加载父页面。添加下面提到的脚本解决了问题。
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "myUniqueKey", "self.parent.location='results.aspx';", true);
答案 2 :(得分:1)
感谢Rifk的解决方案。以下是有类似问题的人的代码:
在aspx文件中,我定义了一个新的JS函数Redirection()。 ValidateFields()函数将进行一些客户端验证。
<head runat="server">
<title>Untitled Page</title>
<script language="javascript" type="text/javascript">
function ValidateFields()
{
alert ("Some client side validations!!");
}
function Redirection()
{
self.parent.location="http://www.google.com";
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<h2>Content - In IFrame</h2>
<asp:CheckBox ID="chkValid" runat="server" />
<asp:ImageButton ID="ImageButton_FillW8Online" ImageUrl="~/images/expand.gif"
OnClick="btnVerify_Click" OnClientClick="return ValidateFields()"
runat="server" style="height: 11px" />
</div>
</form>
</body>
在后面的代码中,我有非常简单的代码,在执行一些服务器端验证后注册clientscriptblock。我要求只有在服务器端验证成功时才会发生重定向。
bool isValid = false;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnVerify_Click(object sender, EventArgs e)
{
//do some validations
isValid = chkValid.Checked;
if (isValid)
this.Page.ClientScript.RegisterClientScriptBlock(typeof(string), "", "Redirection()", true);
}
答案 3 :(得分:1)
你可以试试这个:
Response.Write("<script>window.open('page.aspx','_parent');</script>");
问候。
答案 4 :(得分:0)
Response.Clear();
Header.Controls.Add(new LiteralControl(@"
<script type=""text/javascript"">
top.location = ""/Logout.aspx"";
parent.location = ""/Logout.aspx"";
</script>
"));
答案 5 :(得分:0)
如果您只想使用iframe(非新标签页或窗口)直接“覆盖”当前页面,那么您就不需要代码隐藏。
即:
<asp:LinkButton ID="lnkGeneralEnq" runat="server" OnClientClick="OpenOverFrame();"><strong>click this link</strong></asp:LinkButton>
和ASPX页面中的单行Java脚本代码...
function OpenOverFrame() {
window.open('http://mywebsite.com','_parent');
}