ASP.NET:隐藏/不可见控件能否触发change事件?
ASP.NET中通过隐藏控件触发Partial PostBack的实现方法
问题描述
我在ASP.NET页面中使用jQuery的confirm()弹窗,用户确认后需要触发后台事件,但不想执行完整的PostBack。目前的实现方式是在UpdatePanel内放置一个AutoPostBack=true的TextBox,确认时修改其文本值并通过.trigger('change')触发OnTextChanged后台事件。
但这个方案仅在TextBox可见时有效,一旦将TextBox的Visible属性设为false,客户端不会生成该控件,导致EditsMade.ClientID返回undefined。尝试使用ASP:HiddenField控件,但它没有AutoPostBack属性。
当前使用的代码如下:
<asp:UpdatePanel runat="server" ID="PageVariablesPanel"> <ContentTemplate> <asp:TextBox runat="server" ID="EditsMade" AutoPostBack="true" Text="0" OnTextChanged="EditsMade_TextChanged" /> </ContentTemplate> </asp:UpdatePanel> <script type="text/javascript"> function confirmTheChange() { if (confirm("Do you want to confirm the change?")) { $("#<%= EditsMade.ClientID %>").val("1").trigger('change'); } } </script>
需要找到一种无需完整PostBack,通过隐藏TextBox或HiddenField触发后台事件的方法。
解决方案
可以使用HiddenField替代TextBox,通过手动触发UpdatePanel的__doPostBack方法发起Partial PostBack,随后在后台Page_PreRender事件中处理HiddenField的值。
修改后的代码示例
ASPX前端代码
<asp:UpdatePanel runat="server" ID="PageVariablesPanel"> <ContentTemplate> <asp:HiddenField runat="server" ID="EditsMade" Value="0" /> </ContentTemplate> </asp:UpdatePanel> <script type="text/javascript"> function confirmTheChange() { if (confirm("Do you want to confirm the change?")) { // 设置HiddenField的值 $("#<%= EditsMade.ClientID %>").val("1"); // 触发目标UpdatePanel的Partial PostBack __doPostBack('<%= PageVariablesPanel.ClientID %>', ''); } } </script>
后台C#代码
protected void Page_PreRender(object sender, EventArgs e) { // 判断是否是目标UpdatePanel触发的PostBack if (Request["__EVENTTARGET"] == PageVariablesPanel.ClientID) { // 处理HiddenField的业务逻辑 if (EditsMade.Value == "1") { // 调用原有的事件处理方法 EditsMade_TextChanged(sender, e); } } } protected void EditsMade_TextChanged(object sender, EventArgs e) { // 这里放置你的后台业务逻辑 }
方案说明
HiddenField默认会在客户端渲染为<input type="hidden">,既不会被用户可见或编辑,又能正常获取ClientID- 通过
__doPostBack指定UpdatePanel的ID作为事件目标,只会触发该面板的Partial PostBack,避免整页刷新 - 在
Page_PreRender中处理值,符合ASP.NET页面生命周期,确保后台逻辑在页面渲染前执行完成
内容的提问来源于stack exchange,提问作者Don Del Grande
相关产品推荐
相关产品推荐

