OnClick и OnClientClick - PullRequest
       23

OnClick и OnClientClick

1 голос
/ 30 мая 2011

У меня есть кнопка изображения на всплывающей странице, которая открывается другой страницей

<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, я имею в виду обновить страницу открытия (родительскую). И с этим вышеОбновление кодов работает. Однако на родительской странице все еще отображаются те же данные перед обновлением. И причина в том, что OnClientClick работает до OnClick метод Так что мой вопрос в том, есть ли способ запуститьметод на OnClick и завершить его, а затем запустить метод OnClientClick?

Ответы [ 3 ]

3 голосов
/ 30 мая 2011
<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 голос
/ 30 мая 2011

Нет, вы не можете запустить серверный код (обработчик события OnClick) перед клиентской стороной. Событие OnCLientClick было добавлено для проверки перед отправкой. Есть только один способ сделать это - обновить метод f2 и разместить данные на сервере через ajax

0 голосов
/ 30 мая 2011

Вы можете поместить свой 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 код:

protected void button_Click(Object sender, EventArgs e) {
  // do whatever
  refreshScript.Visible = true;
}
...