WedX - журнал о программировании и компьютерных науках

Binding Repeater with Dictionary‹string, Dictionary‹int,[object]›

Я новичок в .NET, поэтому я борюсь с этим. У меня есть страница контента с элементом управления повторителем. У меня есть словарь, который является Dictionary<string, Dictionary<int,[object]>>. Я хочу, чтобы значение элементов управления внутри элемента управления повторителем было получено из атрибутов объекта — имя кандидата было бы object.CandName, телефон-кандидат был бы object.Phone и т. д.

Я не уверен, как использовать Eval для этого типа словаря. Большинство примеров указывают на Eval("Value"), но для меня это не дает правильного значения. Пожалуйста, помогите!

<asp:Content ID="Content2" ContentPlaceHolderID="content" Runat="Server">
  <div id="rcontent"> 
    <table>
      <tr>
        <td>
          <asp:Label ID="lblerror" runat="server" Text="" Visible="true" CssClass="alert"></asp:Label>
        </td>
      </tr>
    </table>
    <div id ="rptdiv">
      <asp:Repeater ID="Repeater1" runat="server" EnableViewState="false">
        <ItemTemplate>
          <div id="Div3"> 
            <table class="GridViewStyleNoBorder" width=750px cellspacing="0" border="0" >
              <tr>
                <td class="PagerStyle" colspan="4"> 
                  <asp:Label ID="lblName" Runat="server"
Text='<%= Need the value of the [object].objectproperty from dictionary here %>' />
                </td>
              </tr>
            </table>
          </div>

Это мой Page_Load код позади - BLDecision это мой код бизнес-уровня, который возвращает словарь, и значения словаря верны. Я проверил их в режиме отладки.

Код позади:

Dictionary(int, Dictionary(int, InterviewFeedback)) ;

CandIntDetails = new Dictionary(int, Dictionary(int, InterviewFeedback))();

BLDecision objBLDecision = new BLDecision();
int ReqCategoryID = 0;
if (Request.QueryString["ReqCategoryID"] != null)
    ReqCategoryID = int.Parse(Request.QueryString["ReqCategoryID"].ToString());
CandIntDetails = objBLDecision.GetCandidatesforReqCategory(ReqCategoryID);

Repeater1.DataSource = CandIntDetails;
Repeater1.DataBind();

Должен ли я использовать код отделенного кода, могу ли я не делать Eval('<% ....%>') на странице aspx?

Заранее спасибо за помощь.


  • Вы должны более точно описать формат ваших данных. В одном месте вы говорите, что это Dictionary<string, Dictionary<int, InterviewFeedback>>, а в другом подразумеваете, что работаете с Dictionary<int, Dictionary<int, InterviewFeedback>>. Что именно содержит словарь и как должен выглядеть результат? Вы хотите, чтобы вещи были сгруппированы по ключу словаря, или вы хотели получить доступ ко всем значениям для определенного ключа? 05.02.2012
  • Это: Dictionary(int, Dictionary(int, InterviewFeedback)) ; Я хочу получить доступ и отобразить все значения определенного ключа - в каждой строке необходимо получить доступ ко всем значениям и отобразить их. 05.02.2012

Ответы:


1

Вы не можете сделать это только с одним повторителем. Поскольку у вас есть контейнер внутри контейнера, вам нужен повторитель внутри повторителя:

<asp:Repeater ID="Repeater1" runat="server" EnableViewState="false">
<ItemTemplate>
<div id="Div3"> 
    <table class="GridViewStyleNoBorder" width=750px cellspacing="0" border="0" >
    <asp:Repeater ID="Repeater2" runat="server" DataSource='<%# Eval("Value")' >
      <ItemTemplate>
    <tr>
    <td class="PagerStyle" colspan="4"> 
         <asp:Label ID="lblName" Runat="server"
        Text='<%# Eval("Name") %>' />
    </td>
    </tr>

      </ItemTemplate>
    </asp:Repeater>


    </table>
    </div>
</ItemTemplate>
</asp:Repeater>
04.02.2012
  • Спасибо за это предложение. Я добавил еще один повторитель, но не смог получить доступ к значению напрямую, так как значение словаря является бизнес-объектом. Итак, я сделал это в коде позади. Я могу получить отображаемое значение записи. Но он отображает только одну запись. Он имеет всего 3 записи, но отображает первую строку, но не отображает остальные. Должен ли я зациклить его где-нибудь, я что-то упустил. 05.02.2012

  • 2

    Если CandIntDetails является Dictionary<int, Dictionary<int, InterviewFeedback>>, вам нужно извлечь из него конкретную коллекцию, которую вы хотите использовать в качестве источника данных вашего повторителя. Причина в том, что вы хотите отобразить набор из InterviewFeedback объектов, а CandIntDetails нет. CandIntDetails вероятно выглядит примерно так:

    {
        46: {
            0: [InterviewFeedback],
            1: [InterviewFeedback],
            2: [InterviewFeedback]
        }
    }
    

    Из вашего сообщения неясно, какие ключи для внутреннего или внешнего словарей, так что это спекулятивно. Если внешний ключ является идентификатором категории (не уверен, почему GetCandidatesforReqCategory вернет что-то подобное), и если вам не нужны ключи внутреннего словаря, вы можете извлечь свой источник данных следующим образом:

    Repeater1.DataSource = CandIntDetails[ReqCategoryID].Values;
    

    Это сделает ваш источник данных прямым набором InterviewFeedback объектов. Получив этот источник данных, вы можете Eval получить доступ к свойствам InterviewFeedback объектов.

    05.02.2012
  • Спасибо за предложение. Работает сейчас. 07.02.2012
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]