2011-12-21 2 views
0

Я пытаюсь достичь чего-то, что, я уверен, довольно просто, но я не вижу дерева для деревьев. Я создал простой элемент управления, который наследуется от кнопки ссылки, которая содержит список простого объекта, называемого LinkParamaters, идея заключается в том, что в разметке вы можете определить URL-адрес обратной связи, а также параметры, которые затем возвращают свойство PostBackUrl, чтобы включить запрос. Это работало так, как ожидалось, пока я не захочу, чтобы данные связывали параметры внутри ретранслятора. Затем я начал получать следующую ошибку Parser:Data Bind to Custom Control Parameter Collection

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

Итак, я понял, что мне, очевидно, необходимо реализовать событие привязки данных. возможно, есть интерфейс, который мне нужно реализовать, я не смог его найти. К сожалению, я только что переместил задания, поэтому на данный момент у меня нет доступа к рефлектору, поэтому я не мог проснуться в коде, но я мог видеть, что у Control есть эти события/методы, наследующие объект параметра из Control, разрешившего ошибку анализатора, но неудивительно не разрешал привязку, и это не имеет никакого смысла, поскольку это не контроль.

Код кнопки Link:

[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> 

У меня вокруг проблемы сейчас при обращении с этой стороны сервера, но это действительно отчасти нивелирует то, что Я пытался создать пользовательский элемент управления, поскольку я хотел бы определить эти вещи исключительно в разметке. Даже просто ссылка на статью, чтобы начать меня, будет очень благодарна, поскольку я долгое время искал Google и мог найти только похожие проблемы, но не то же самое, но это, скорее всего, приводит к низким критериям поиска.

Заранее спасибо

Пол

+0

К сожалению нет ответа на это, я быть немым или это просто Рождество перерыв, что означало это потерялся в куче? –

ответ

0

мне удалось исправить это, в конце концов, используя мой мозг, я не 100% уверен, что он является идеальным решением, но это не имеет смысл для меня и многого другого важно, что эта глупая небольшая проблема сейчас работает: 0).

я получил свой класс LinkParameter извлечь из DataBoundControl, а затем отменяют метод DataBind на таможенный контроль, а затем сказал каждый параметр, чтобы выполнить это DataBind метод:

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

Если у кого есть пылесос, более эффективное решение то, пожалуйста, дайте мне знать.

Благодаря

Пол