问题
I have a repeater as shown below. How to get the Report ID in code behind (from the expression inside hiddenContent2) ?
The expression is
<%# Eval("ReportID") %>
Note: I prefer a method that does not use "FindControl".
ASP.NET
<asp:Repeater ID="rptReports" runat="server">
<HeaderTemplate>
<div></div>
</HeaderTemplate>
<ItemTemplate>
<div id="repeaterIdentifier" class="repeaterIdentifier">
<div id="reportTitle" class="reportTitle">
<%# Eval("Title") +":" %>
</div>
<div id ="reportFrequency" class="reportFrequency">
<%# " Frequency - "+ Eval("Frequeny") %>
</div>
</div>
<div class="reportContent">
<div class="repeaterLine">
<asp:TextBox ID="txtEmailRecipients" runat="server" class="textEdit" Text='<%# Eval("Recipients")%>' TextMode="MultiLine"></asp:TextBox>
</div>
</div>
<div id="hiddenContent2">
<%# Eval("ReportID") %>
</div>
</ItemTemplate>
</asp:Repeater>
Code Behind
protected void Save_Click(object sender, EventArgs e)
{
foreach (RepeaterItem item in rptReports.Items)
{
foreach(Control c in item.Controls)
{
string test1 = c.ID;
Type t = c.GetType();
}
string emails = ((TextBox)item.Controls[1]).Text;
}
}
回答1:
Try this,
foreach (RepeaterItem item in rptReports.Items)
{
Label lblReportID= (Label)item.FindControl("lblReportID");
string ReportID = lblReportID.Text;
}
If you are using "div", then try this:
<div id="hiddenContent2" runat="server">
<%# Eval("ReportID") %>
</div>
foreach (RepeaterItem item in rptReports.Items)
{
System.Web.UI.HtmlControls.HtmlGenericControl hiddenContent2 = (System.Web.UI.HtmlControls.HtmlGenericControl)item.FindControl("hiddenContent2");
string ReportID = hiddenContent2.InnerHtml;
}
回答2:
You could use ItemIndex property of Repeater. This is the sample:
<asp:Repeater runat="server" ID="repTest">
<ItemTemplate>
<div id="hDiv">
<%# Eval("SomeID") %>
</div>
</ItemTemplate>
</asp:Repeater>
Code behinde:
protected void Page_Load(object sender, EventArgs e)
{
var objects =
new object[] {
new {SomeID = 1},
new {SomeID = 2},
new {SomeID = 3},
new {SomeID = 4}
};
repTest.DataSource = objects;
repTest.DataBind();
}
protected void btnClick(object sender, EventArgs e)
{
var data = (object[])repTest.DataSource;
foreach (RepeaterItem item in repTest.Items)
{
var obj = data[item.ItemIndex];
var id = obj.GetType().GetProperty("SomeID").GetValue(obj, null);
}
}
So, two things you need to do.
来源:https://stackoverflow.com/questions/11825036/how-to-get-literal-content-value-in-repeater