用户控件 MagicAjax 选择器 __doPostBack

本文介绍了一种解决在MagicAjaxPanel中使用用户控件时无法打开选择器模态窗口的方法。通过调整用户控件内部结构,在TextBox外包裹Panel解决了刷新问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做的系统中用到的选择器,因为赶时间暂时做了用户控件。
但是由于想将该控件放到MagicAjaxPanel中防止刷新,结果是无法打开选择器的模态窗口。
已经做成自定义控件的选择器不存在这个问题。
于是寻找原因,最后将Panel套到用户控件里面的TextBox外面,就可以了。

用户控件里的html:

ExpandedBlockStart.gifContractedBlock.gif<%dot.gif@ Control Language="c#" AutoEventWireup="false" Codebehind="ServiceChooser.ascx.cs" Inherits="Tencent.ITIL.ItilRequest.ItilRequestWeb.UserControl.ServiceChooser" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
ExpandedBlockStart.gifContractedBlock.gif
<%dot.gif@ Register TagPrefix="ajax" Namespace="MagicAjax.UI.Controls" Assembly="MagicAjax" %>
ExpandedBlockStart.gifContractedBlock.gif
<script>dot.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif
/**//*
InBlock.gif        function openDialog3(srcW,srcH,srcU,sl) 
InBlock.gif        {    
InBlock.gif            var X=0;
InBlock.gif            var Y=0;
InBlock.gif            var Cstyle;
InBlock.gif            X=(screen.width-srcW)/2;
InBlock.gif            Y=(screen.height-srcH)/2;
InBlock.gif            Cstyle = "dialogLeft:"+X+"px;dialogTop:"+Y+"px;dialogHeight:"+srcH+"px;dialogWidth:"+srcW+"px;help:no;status:no;scroll:"+sl;
InBlock.gif            var sReturnVal = window.showModalDialog(srcU,window,Cstyle);
InBlock.gif            return sReturnVal;
InBlock.gif        }
ExpandedSubBlockEnd.gif        
*/

InBlock.gif        
function GetValue(postback)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
//目前已经选中的值
InBlock.gif
            var selectedValues = document.getElementById("<%=hdId.ClientID%>").value;
InBlock.gif            
var params = "";
InBlock.gif            
if(selectedValues != "" && selectedValues != ";")
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                params 
= "id=" + selectedValues;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
InBlock.gif            
var url = "../Web/ServiceSelector.aspx";
InBlock.gif            
if(params != "")
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                url 
+= "?" + params;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
var result = openDialog2('550','400',url,'no');
InBlock.gif            
InBlock.gif            
InBlock.gif            
var oldId = document.getElementById("<%=hdId.ClientID%>").value;
InBlock.gif            
if(result)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
var serviceIds = result[0];
InBlock.gif                
var serviceNames = result[1];
InBlock.gif                document.getElementById(
"<%=hdId.ClientID%>").value = serviceIds;
InBlock.gif                document.getElementById(
"<%=txtName.ClientID%>").value = serviceNames;                
InBlock.gif                
ExpandedSubBlockEnd.gif            }

InBlock.gif                        
InBlock.gif            
//var attr = document.getElementById("<%=this.ClientID%>").getAttribute("AutoPostback");            
InBlock.gif
            
InBlock.gif            
InBlock.gif            
if(postback.toLowerCase() == "true" && oldId != document.getElementById("<%=hdId.ClientID%>").value)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                __doPostBack('
<%=txtName.ClientID%>','');
ExpandedSubBlockEnd.gif            }

InBlock.gif            
ExpandedBlockEnd.gif        }

None.gif
</script>
None.gif
<ajax:ajaxpanel id="Ajaxpanel1" runat="server">
None.gif  
<asp:textbox id="txtName" ReadOnly="True" runat="server" Width="180px"></asp:textbox>
None.gif
</ajax:ajaxpanel>
None.gif
&nbsp;
None.gif
<IMG style="CURSOR: hand" onclick="GetValue('<%=AutoPostBack%>');" src="/tof_client/images/addrbook.gif"> 
None.gif
<INPUT id="hdId" type="hidden" name="hdId" runat="server">


用户控件后台代码:
None.gif//dot.gif.
None.gif
public bool AutoPostBack
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{                
InBlock.gif                
return txtName.AutoPostBack;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                txtName.AutoPostBack 
= value;
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

None.gif
None.gif
None.gif
public event System.EventHandler SelectedChanged;
None.gif
None.gif
//dot.gif.
None.gif

None.gif
private void txtName_TextChanged(object sender, System.EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif{
InBlock.gif            SelectedChanged(
null,null);
ExpandedBlockEnd.gif        }



注意:
1.JS中的__doPostBack方法的调用,如果第一个参数传空,则无论怎样都会刷新整个页。必须传入txtName的ID。
2.下面这一段在GetValue里执行不会成功。因为在解释这段JS的时候,IE检测不到后台定义的AutoPostBack属性(这时候还没加载dll,所以找不到?)
var attr = document.getElementById("<%=this.ClientID%>").getAttribute("AutoPostback");  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值