绑定中继器与Dictionary <string,dictionary <int,[object] =“”> </string,>

时间:2012-02-04 19:50:16

标签: asp.net dictionary repeater eval bind

我是.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();

我应该从代码隐藏中使用,我不能在aspx页面中执行Eval('<% ....%>')吗?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

只有一个中继器不能这样做。由于容器内有容器,因此在转发器中需要一个Repeater:

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

答案 1 :(得分:0)

如果CandIntDetailsDictionary<int, Dictionary<int, InterviewFeedback>>,则需要从中提取要用作转发器数据源的特定集合。原因是因为您要呈现InterviewFeedback个对象的集合,CandIntDetails 不是CandIntDetails可能看起来像这样:

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

从你的帖子中不清楚内部或外部词典的键是什么,所以这是推测性的。如果外键是类别ID(不确定为什么GetCandidatesforReqCategory会返回类似的内容),如果您不关心内部字典键,则可以像这样提取数据源:

Repeater1.DataSource = CandIntDetails[ReqCategoryID].Values;

这将使您的数据源成为InterviewFeedback个对象的直接集合。一旦这是您的数据源,您就可以Eval访问InterviewFeedback个对象的属性。