Привязка данных к коллекции параметров пользовательского элемента управления - PullRequest
0 голосов
/ 21 декабря 2011

Я пытаюсь достичь чего-то, что, я уверен, довольно просто, но я не вижу дерева для деревьев.Я создал простой элемент управления, который наследуется от кнопки ссылки, которая содержит список простого объекта 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>

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

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

Пол

1 Ответ

0 голосов
/ 05 января 2012

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

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

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

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

Спасибо

Пол

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...