【问题标题】:Data Bind to Custom Control Parameter Collection数据绑定到自定义控件参数集合
【发布时间】:2011-12-21 09:24:23
【问题描述】:

我正在尝试实现一些我确信很简单但我看不到树木的树木。我创建了一个从链接按钮继承的简单控件,该按钮包含一个名为 LinkParamaters 的简单对象的列表,其想法是在标记中您可以定义一个回发 url 以及然后返回 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>

我现在通过处理这个服务器端解决了这个问题,但它确实否定了我试图创建自定义控件的内容,因为我想纯粹在标记中定义这些东西。即使只是一个让我开始的文章的链接也会非常感激,因为我已经用谷歌搜索了很长时间,只能找到类似的问题,但不是同一件事,但这很可能是搜索条件不佳。

提前致谢

保罗

【问题讨论】:

  • 很遗憾,这个问题没有答案,我是笨蛋还是只是圣诞节假期,这意味着这件事迷路了?

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


【解决方案1】:

我最终通过使用我的大脑设法解决了这个问题,我不是 100% 相信这是理想的解决方案,但它对我来说确实有意义,更重要的是,这个愚蠢的小问题现在正在解决:0)。

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

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

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

谢谢

保罗

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 2019-09-21
    • 2010-10-11
    • 2016-11-28
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多