Контроль доступа внутри ретранслятора внутри пользовательского элемента управления - PullRequest
0 голосов
/ 04 августа 2011

В моем коде есть свойство, которое отправляет информацию в пользовательском контроле, который является ретранслятором. rptOwners - это репитер, который я использую. Информация внутри ретранслятора должна быть проанализирована вручную в xml и отправлена ​​обратно через свойство в коде. Проблема в том, что я не могу получить доступ к значениям элементов управления внутри повторителя.

При отладке я вижу, что есть 2 элемента, которые я ожидал в rptOwners.DataSource, и что rptOwners.Items.Count = 2. Затем я вижу в окне просмотра, что нужная мне информация есть Я не могу получить к нему доступ.

Я пробовал rptOwners.DataSource [0] .Name и т. Д., Но он говорит, что «не может применить индексирование к выражению объекта типа.

public string xmlString
{
    get
    {
        var _builder = new StringBuilder();

        var rpt = rptOwners.DataSource;
        IList<string> ownersRepeater = new List<string>();

        foreach (var item in rpt )
        {
            _builder.Append("<Owners>");
            _builder.Append("<Owner>");
            _builder.Append(String.Format("<item>{0}</item>", name));
            _builder.Append(String.Format("<item>{0}</item>", address));
            _builder.Append(String.Format("<item>{0}</item>", age));
            _builder.Append("</Owner>");
            _builder.Append("</Owners>");
        }
        return _builder.ToString();
    }

Спасибо за помощь. Дайте мне знать, если это не было достаточно ясно.

Вот что я имею в виду ...

enter image description here

Вот ответ:

foreach (RepeaterItem item in rptOwners.Items)
        {
            var lblOwnerName = (Label)item.FindControl("lblOwnerName");


            _builder.Append("<Owners>");
            _builder.Append("<Owner>");
            _builder.Append(String.Format("<item>{0}</item>", lblOwnerName));
            _builder.Append(String.Format("<item>{0}</item>", item));
            _builder.Append(String.Format("<item>{0}</item>", item));
            _builder.Append(String.Format("<item>{0}</item>", item));
            _builder.Append(String.Format("<item>{0}</item>", item));
            _builder.Append(String.Format("<item>{0}</item>", item));
            _builder.Append(String.Format("<item>{0}</item>", item));
            _builder.Append("</Owner>");
            _builder.Append("</Owners>");


        }
        return _builder.ToString();

Ответы [ 3 ]

1 голос
/ 04 августа 2011

Попробуйте это (я только добавил актерский состав):

public string xmlString
{
get
{
    var _builder = new StringBuilder();

    var rpt = (IList<Owner>) rptOwners.DataSource; //ADDED A CAST
    IList<string> ownersRepeater = new List<string>();

    foreach (var item in rpt )
    {
        _builder.Append("<Owners>");
        _builder.Append("<Owner>");
        _builder.Append(String.Format("<item>{0}</item>", name));
        _builder.Append(String.Format("<item>{0}</item>", address));
        _builder.Append(String.Format("<item>{0}</item>", age));
        _builder.Append("</Owner>");
        _builder.Append("</Owners>");
    }
    return _builder.ToString();
}
0 голосов
/ 04 августа 2011

Я предлагаю вам не использовать 'var', где вы хотите. Точный тип лучше показать, если неясно, какой тип смотрит в правую часть выражения.

Нельзя применять индексатор только потому, что свойство Repeater.DataSource имеет тип System.Object. Вы должны привести его к соответствующему, чтобы получить доступ к индексатору (List?).

0 голосов
/ 04 августа 2011

Я не знаю, как реализовано ваше свойство DataSource, но из вашего описания кажется, что изменение строки

var rpt = rptOwners.DataSource;

на

var rpt = rptOwners.Items;

должно работать.

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