2011-12-21 104 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.

所以我想我顯然需要實現一個數據綁定事件。也許有一個我需要實現的接口,我找不到一個接口。可悲的是,我剛剛移動作業,所以目前無法訪問反射器,所以無法深入代碼,但我可以看到Control擁有這些事件/方法,從Control繼承參數對象解決了解析器錯誤,但不出所料沒有解決綁定問題,因爲它不是一個控件。

鏈接按鈕代碼:

[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

可悲的是沒有答案對於這一點,我是啞巴或者是它只是在聖誕節休息這意味着這堆迷路了? – 2012-01-04 17:26:04

回答

0

我設法通過我的大腦,我不是100%確信它是理想的解決方案來解決這個到底,但它確實是有意義的我,更重要的是,這個愚蠢的小問題現在正在工作:0)。

我得到了我LinkParameter類自DataBoundControl派生,然後推翻上的自定義控制DataBind方法,然後告訴每個參數來執行它的DataBind方法:

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

如果任何人有一個更清潔,更高效的解決方案那麼請讓我知道。

感謝

保羅