2011-01-30 15 views
1

私はupdatepanelanimationextenderを持っています。このコントロールをWebページに追加すると、コントロールのプロパティにパラメータとしてupdatepanelのIDを渡したいと思います。updatepanelanimationextenderをcodebehindに設定する

ユーザーコントロール:

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> 

ウェブページ:UpdatePanel1はのUpdatePanelのIDです。

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

私はエラーを取得する:

The TargetControlID of 'UpdatePanelAnimationExtender1' is not valid. The value cannot be null or empty.

+0

を有効にしているのですか?また、 'UpdatePanelID'に何かを割り当てるのですか? –

+0

viewstateが有効です。いつあなたはどういう意味ですか? コントロールのプロパティです – urker

答えて

0

AJAXコントロールエクステンダがViewStateでのTargetControlIDを格納しないことを行うには(私はリフレクターでSystem.Web.Extensions 3.5で確認し、そのプロパティのみを取得します/プライベートメンバを設定します)。したがって、保存した値はポストバック時に失われます。

あなたはすべてのリクエストに値を格納する必要があります:あなたは `ViewState`は

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

説明してくださいリフレクターでどうやって確認しましたか? – urker

+0

@urker、まあ、私は[Reflector](http://www.red-gate.com/products/dotnet-development/reflector/)を解雇し、GACから 'System.Web.Extension.dll'アセンブリを開き、 'System.Web.UI'名前空間(すべてのエクステンダの基本クラスと' TargetControlID'を実装したもの)の 'ExtenderControl'クラスにナビゲートし、' TargetControlID'プロパティの逆アセンブルされたコードを表示しました。 –

0

その例外を回避するには、まずUpdatePanelIDがnullでないことを確認する必要があり...

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

あなたはプロパティを設定することを望む場合UpdatePanelIDの親ページからのプログラムでは、UpdateProgress1をControls_UpdateProgressインスタンスとしてキャストする必要があります。 、このような何かを...

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

UpdatePanelIDはいつでもnullではありません、aspxからIDを設定したいのですが、コードは無効にしています – urker

関連する問題