我在弹出页面上有一个图像按钮,由另一页打开
<asp:ImageButton
ID="Button_kalem_islemikaydet"
runat="server"
CausesValidation="False"
ImageUrl="~/images/butonlar/buyuk/Kaydet.jpg"
meta:resourcekey="Button_kalem_islemikaydetResource1"
OnClick="Button_ust_islemikaydet_Click"
OnClientClick="f2()"
Width="100" />
f2()
是
<script type="text/javascript">
function f2() {
opener.document.getElementById("TextBox1").value = "hello world";
opener.document.getElementById("HiddenField1").value = "hello world";
window.opener.location.href = window.opener.location.href;
}
</script>
Button_ust_islemikaydet_Click
是另一个在aspx.cs文件中实现的方法,它更新了GridView中父页面中显示的数据库表。
我要做的是doPostBack我的意思是刷新开启者(父)页面。并且使用以上代码刷新工作。但是,父页面在刷新之前仍然显示相同的数据。原因是< strong> OnClientClick
在OnClick
方法之前有效
所以我的问题是,有什么方法可以在OnClick
上运行该方法并完成它,然后运行OnClientClick
方法?
答案 0 :(得分:3)
<form id="aspnetForm" runat="server">
<asp:Button Text="Click Me" ID="ClickMeButton" OnClick="ClickMeButton_OnClick" runat="server" />
<asp:HiddenField runat="server" ID="UpdateOpenerHiddenField" Value="false" />
<script type="text/javascript">
//1st approach
var updateOpenerField = window.document.getElementById("<%= UpdateOpenerHiddenField.ClientID %>");
if (updateOpenerField.value === "true") {
f2();
updateOpenerField.value = "false";
}
// for the 2nd approach just do nothing
function f2() {
alert("Hello, opener!");
}
</script>
</form>
protected void ClickMeButton_OnClick(object sender, EventArgs e)
{
//1st approach
UpdateOpenerHiddenField.Value = "true";
// 2nd approach
ClientScript.RegisterStartupScript(this.GetType(), "RefreshOpener", "f2();", true);
}
答案 1 :(得分:1)
不,您无法在客户端之前运行服务器端代码(OnClick事件处理程序)。在回发之前添加了OnCLientClick事件以执行一些验证。只有一种方法 - 更新f2方法并通过ajax在服务器上发布数据
答案 2 :(得分:0)
您可以将javascript放在PlaceHolder标记中,该标记在服务器端的OnClick处理程序中可见。
aspx代码:
<asp:PlaceHolder id="refreshScript" visible="false" runat="server">
window.opener.location.href = window.opener.location.href;
window.close();
</asp:PlaceHolder
cs code:
protected void button_Click(Object sender, EventArgs e) {
// do whatever
refreshScript.Visible = true;
}