2011-12-21 6 views
0

私は確かに簡単なことを達成しようとしていますが、木の木は見えません。私はLinkParamatersという単純なオブジェクトのリストを含むリンクボタンから継承する簡単なコントロールを作成しました。つまり、マークアップでポストバックURLとクエリーストリングを含むPostBackUrlプロパティを返すパラメータを定義することができます。これは、リピータ内でパラメータをデータバインドするまで、期待どおりに機能していました。その後、次のパーサーエラーが発生しました。データをカスタム制御パラメータコレクションにバインドする

Databinding expressions are only supported on objects that have a DataBinding event. UI.Controls.LinkParameter does not have a DataBinding event.

私は明らかにデータバインドイベントを実装する必要があると考えました。私が実装する必要のあるインターフェースがあるかもしれませんが、見つけられませんでした。残念ながら私はちょうど仕事を移動したので、現時点ではリフレクターにアクセスできないのでコードにドリルダウンできませんでしたが、コントロールにこれらのイベント/メソッドがあり、コントロールからパラメータオブジェクトを継承してパーサエラーを解決しましたが、バインディングを解決していないし、それはコントロールではないので、とにかく意味をなさない。

リンクボタンコード:

[ParseChildren(true, DefaultProperty = "Parameters")] 
public class QueryLinkButton : LinkButton 
{ 

    private String _url = null; 

    public QueryLinkButton() 
    { 
     this.Parameters = new List<LinkParameter>(); 
    } 

    public override String PostBackUrl 
    { 
     get 
     { 
      return _url ?? (_url = BuildUrl()); 
     } 
     set 
     { 
      base.PostBackUrl = value; 
     } 
    } 

    [PersistenceMode(PersistenceMode.InnerDefaultProperty)] 
    public List<LinkParameter> Parameters { get; set; } 

    private String BuildUrl() 
    { 
     //Build URL to Include Query String Params   
    } 

} 

public class LinkParameter 
{ 

    public String Name { get; set; } 

    public String Value { get; set; } 

} 

そしてAspをコード:

<custom:QueryLinkButton runat="server" ID="EventLink" Text="View Accommodation" PostBackUrl="HotelCriteria.aspx"> 
     <custom:LinkParameter runat="server" Name="EventID" Value='<%# Eval("EventID")%>'/> 
    </custom:QueryLinkButton> 

私はこのサーバー側を処理することによって、今の問題を中心に持っているが、それは本当に親切の何を否定私はカスタムコントロールを作成しようとしていましたが、これらのことをマークアップで純粋に定義したかったのです。私が長い間グーグルグーグルで似たような問題しか見つけられなかったが、同じことではないが、それは貧弱な検索基準の可能性が高いため、記事をリンクするだけでも、非常に高く評価されるだろう。事前に

おかげ

ポール

+0

このためノーの答えは、私が馬鹿されていますか、それは、これは山に失われてしまったものでちょうどクリスマス休暇でしたか? –

答えて

0

は、私はそれが理想的なソリューションである100%の自信がないんだけど、それは私には意味を成しません、私の脳を使用して、最後にこれを修正するために管理し、より多くの重要なことに、このばかげた小さな問題は今働いています:0)。

私はDataBoundControlから派生する私LinkParameterクラスを持って、その後、カスタムコントロールのDataBindメソッドをオーバーライドして、それはのDataBindメソッドです実行するために、各パラメータに次のように語った。誰もが、よりクリーンで効率的なソリューションを持っている場合

public override void DataBind() 
    { 
     base.DataBind(); 
     foreach (LinkParameter param in Parameters) 
     { 
      param.DataBind(); 
     } 
    } 

それから私に知らせてください。

おかげ

ポール悲しいこと

関連する問題