1

別のページで開くポップアップページに画像ボタンがあります

<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です。つまり、オープナー(親)ページを更新します。上記のコードを使用すると、更新は機能します。ただし、親ページには更新前に同じデータが表示されます。理由は、メソッド SoOnClientClickの前に機能OnClickするためです。私の質問は、メソッドを実行しOnClickて終了し、メソッドを実行するOnClientClick方法はありますか?

4

3 に答える 3

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);
    }
于 2011-05-30T11:48:12.630 に答える
1

いいえ、クライアント側の前にサーバー側のコード(OnClickイベントハンドラー)を実行することはできません。OnCLientClickイベントが追加され、ポストバックの前に検証を実行します。それを行う唯一の方法があります-f2メソッドを更新し、ajaxを介してサーバーにデータを投稿します

于 2011-05-30T11:32:41.147 に答える
0

サーバー側のOnClickハンドラーで表示できるPlaceHolderタグ内にJavaScriptを配置できます。

aspxコード:

<asp:PlaceHolder id="refreshScript" visible="false" runat="server">
  window.opener.location.href = window.opener.location.href;
  window.close();
</asp:PlaceHolder

csコード:

protected void button_Click(Object sender, EventArgs e) {
  // do whatever
  refreshScript.Visible = true;
}
于 2011-05-30T11:49:42.310 に答える