数据绑定到自定义控件参数集合

时间:2011-12-21 09:24:24

标签: c# asp.net data-binding custom-controls repeater

我正在努力实现一些我确信非常简单的东西,但我看不到木头的树木。我创建了一个简单的控件,它继承了链接按钮,其中包含一个名为LinkParamaters的简单对象的列表,这个想法是在标记中你可以定义一个回发网址以及然后返回PostBackUrl属性以包含查询字符串的参数。这是按预期工作,直到我想数据绑定转发器中的参数。然后我开始得到以下分析器错误:

  

仅在具有DataBinding事件的对象上支持数据绑定表达式。 UI.Controls.LinkParameter没有DataBinding事件。

所以我认为我显然需要实现数据绑定事件。也许我需要实现一个接口,我找不到一个。可悲的是,我刚刚移动了工作,所以目前无法访问反射器,所以无法深入到代码中,但我可以看到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>

我现在通过处理这个服务器端解决了这个问题,但它确实否定了我试图创建自定义控件的内容,因为我想在标记中完全定义这些内容。即使只是链接到一篇文章来启动我也会非常感激,因为我已经搜索了很长时间并且只能找到类似的问题,但不一样,但这很可能是搜索条件不佳。

提前致谢

1 个答案:

答案 0 :(得分:0)

我设法通过使用我的大脑来解决这个问题,我不是百分之百地确信它是理想的解决方案,但它确实对我有意义,更重要的是这个愚蠢的小问题现在正在起作用:0)。< / p>

我的LinkParameter类派生自DataBoundControl,然后覆盖自定义控件上的DataBind方法,然后告诉每个参数执行它的DataBind方法:

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

如果有人有更清洁,更有效的解决方案,那么请告诉我。

由于