Привязка повторителя со словарем <string, Dictionary <int, [object]> - PullRequest
0 голосов
/ 04 февраля 2012

Я новичок в .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();

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

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

Ответы [ 2 ]

0 голосов
/ 06 февраля 2012

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

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

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

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

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

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

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