我如何运行我的Javascript OnClientClick和c# OnClick没有回发

本文关键字:OnClick OnClientClick Javascript 何运行 运行 我的 | 更新日期: 2023-09-27 18:04:36

我在母版页中有一个div作为弹出窗口,名为" mydiv-clear "。
我有我的主页内容内的div 'fade'。

我能够成功地"弹出"我的div(改变显示从无块)与Javascript OnClientClick,如果我使用"return false;"在我的OnClientClick防止回发(div回到显示:无回发)。

我想在我的弹出框中执行c# OnClick控件的额外功能。当我输入return=false;在我的OnClientClick我不能击中我的c# OnClick代码。当我删除return=false;我的页面被张贴回来,我的显示回到display=none;在线解决方案建议将我的按钮移动到UpdatePanel控件或使用UseSubmitBehaviour=false,但这两种方法都不适合我。

下面的解决方案,当我突破我的代码将触发我的javascript(弹出窗口出现)导致回发(弹出窗口消失),并触发我的c#。有人能建议一种防止回发的方法吗?由于

。净

<asp:Button ID="btnOptOut" OnClientClick="div_show();" UseSubmitBehavior="false" OnClick="btnOptOut_Click" CssClass="btn btn-default" runat="server" Text="Opt Out" />
c#

protected void btnOptOut_Click(object sender, EventArgs e)
            {
                try
                {
                    _dal.createOptOutRecord(_myuser.id, _myuser.EmailAddress);
                    //More functionality to go here
                }
                catch(Exception ex)
                {

                }
            }
Javascript

 function div_show() {
    document.getElementById('mydiv-clear').style.display = "block";
    document.getElementById('fade').style.opacity = ".1";
}

我如何运行我的Javascript OnClientClick和c# OnClick没有回发

回发将始终对按钮OnClick事件执行。即使它在UpdatePanel中,它仍然会进行(部分)回发。但是只要div在外部,UpdatePanel仍然可以工作。

但是有多种方法可以保持div的可见性。第一个例子使用RegisterStartupScript
    protected void btnOptOut_Click(object sender, EventArgs e)
    {
        //call the div_show() function again after postback
        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "showDiv", "div_show()", true);
        //or set the visibility directly to the div after postback
        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "showDiv", "document.getElementById('mydiv-clear').style.display = '"block'";", true);
    }
第二个例子使用了一个全局变量。
    public string divVisibility = "none";
    protected void btnOptOut_Click(object sender, EventArgs e)
    {
        divVisibility = "block";
    }

,然后在。aspx文件

    <div id="mydiv-clear" style="display: <%= divVisibility %>">myDiv</div>

在.aspx页面中有UpdatePanel的第三个例子。

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel3" runat="server">
    <ContentTemplate>
        <asp:Button ID="btnOptOut" OnClientClick="div_show();" UseSubmitBehavior="false" OnClick="btnOptOut_Click" CssClass="btn btn-default" runat="server" Text="Opt Out" />
        <asp:Label ID="Label1" runat="server" Text="Does it work?"></asp:Label>
    </ContentTemplate>
</asp:UpdatePanel>
<div id="mydiv-clear" style="display: none">myDiv</div>

然后在代码后面。

    protected void btnOptOut_Click(object sender, EventArgs e)
    {
        Label1.Text = "Yes it does!";
    }