我是.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('<% ....%>')
吗?
提前感谢您的帮助。
答案 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)
如果CandIntDetails
是Dictionary<int, Dictionary<int, InterviewFeedback>>
,则需要从中提取要用作转发器数据源的特定集合。原因是因为您要呈现InterviewFeedback
个对象的集合,CandIntDetails
不是。 CandIntDetails
可能看起来像这样:
{
46: {
0: [InterviewFeedback],
1: [InterviewFeedback],
2: [InterviewFeedback]
}
}
从你的帖子中不清楚内部或外部词典的键是什么,所以这是推测性的。如果外键是类别ID(不确定为什么GetCandidatesforReqCategory
会返回类似的内容),如果您不关心内部字典键,则可以像这样提取数据源:
Repeater1.DataSource = CandIntDetails[ReqCategoryID].Values;
这将使您的数据源成为InterviewFeedback
个对象的直接集合。一旦这是您的数据源,您就可以Eval
访问InterviewFeedback
个对象的属性。