我如何运行我的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";
}
回发将始终对按钮OnClick
事件执行。即使它在UpdatePanel中,它仍然会进行(部分)回发。但是只要div在外部,UpdatePanel仍然可以工作。
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!";
}