在代码后面设置updatepanelanimationextender TargetControlId

时间:2011-01-30 17:30:28

标签: asp.net ajax ajaxcontroltoolkit

在usercontrol内部我有updatepanelanimationextender,当我将此控件添加到网页时,我想将updatepanel的Id作为参数传递给控件的属性。

Usercontrol:

public partial class Controls_UpdateProgress : System.Web.UI.UserControl
{ 
    public string UpdatePanelID { get; set; }
    protected void Page_Load(object sender, EventArgs e)
    {     
        if (!IsPostBack)
        {
            UpdatePanelAnimationExtender1.TargetControlID = UpdatePanelID;              
        }

    }
}

<cc1:updatepanelanimationextender id="UpdatePanelAnimationExtender1" runat="server" >
            <Animations>
               <OnUpdating>
                   <Parallel duration="0" >        
                       <ScriptAction Script="onUpdating();" />  
                   </Parallel>
               </OnUpdating>
                 <OnUpdated>
                  <Parallel duration="0">             
                     <ScriptAction  Script="onUpdated();"  /> 
                  </Parallel> 
               </OnUpdated>
            </Animations>
        </cc1:updatepanelanimationextender>

WebPage:UpdatePanel1是updatepanel的id。

<uc1:UpdateProgress ID="UpdateProgress1" runat="server" UpdatePanelID="UpdatePanel1"    />

我收到错误:

  

的TargetControlID   'UpdatePanelAnimationExtender1'不是   有效。该值不能为null或   空。

2 个答案:

答案 0 :(得分:0)

要避免该异常,首先应确保UpdatePanelID不为null ...

if (!IsPostBack)         { 
     if (UpdatePanelID != Null) { 
            UpdatePanelAnimationExtender1.TargetControlID = UpdatePanelID;
     }
}

如果您希望以编程方式从父页面设置UpdatePanelID的属性,则需要将UpdateProgress1强制转换为Controls_UpdateProgress实例。要做到这一点,做这样的事情......

((Controls_UpdateProgress)UpdateProgress1).UpdatePanelID = "ThisIsTheIdYouWishToSet";

答案 1 :(得分:0)

AJAX控件扩展器不会将TargetControlID存储在ViewState中(我使用Reflector检查了System.Web.Extensions 3.5,并且该属性仅获取/设置私有成员)。因此,您存储的值会在回发时丢失。

您必须将值存储在每个请求中:

protected void Page_Load(object sender, EventArgs e)
{     
    UpdatePanelAnimationExtender1.TargetControlID = UpdatePanelID;              
}