[英]Get RepeaterItem in c# if code in a asp.net page <% … %>
[英]ASP.Net - Getting data from RepeaterItem
我是ASP.Net的新手,我不确定我是否会以正确的方式解决这个问题。 我有一个Repeater,它绑定到一个“图像”对象列表。 在每个RepeaterItem内是一个复选框,我有一个按钮OnClick事件,我想显示已检查的Image对象的一些属性。
标签更新,但元数据为空。 DataBinder.Eval(i.DataItem,“FileName”)将返回null,但我不确定为什么? 我想也许复选框的回发导致了问题,但是如果我尝试在发生任何回发之前显示数据,我仍然会遇到同样的问题,所以也许我没有正确地获取属性。 或者我是以完全错误的方式解决这个问题? 任何帮助赞赏。
码:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
string importPath = Server.MapPath("~/Images/ForImport");
ImageProcessor processor = new ImageProcessor(importPath);
rptImageList.DataSource = processor.ImageList;
rptImageList.DataBind();
}
}
protected void btnImport_Click(object sender, EventArgs e)
{
foreach (RepeaterItem i in rptImageList.Items)
{
CheckBox chk = i.FindControl("chkSelectImage") as CheckBox;
if (chk.Checked)
{
Testlabel.Text += "Selected: " + DataBinder.Eval(i.DataItem, "FileName");
}
}
}
HTML:
<asp:Repeater ID="rptImageList" runat="server">
<ItemTemplate>
<div class="photoinstance">
<asp:Image runat="server" ImageUrl='<%#"Images/ForImport/" +DataBinder.Eval(Container.DataItem, "FileName") %>' />
<asp:CheckBox ID="chkSelectImage" AutoPostBack="true" runat="server"/>
<p><%#Eval("FileName")%> - <%#Eval("FileSize")%> bytes</p>
</div>
</ItemTemplate>
</asp:Repeater>
i.DataItem在btnImport_Click中不可用(为空),仅在ItemDataBound事件中可用(如果我没记错事件名称)。
您可以使用HiddenField存储FileName,然后您必须调用i.FindControl。
我认为这个问题是询问如何在回发中从转发器获取数据,更具体地说,如何与转发器内的CheckBox进行交互。 所以在另一个控件的回发上,如何做到这一点的一个例子是;
protected void CheckBox_CheckedChanged(object sender, EventArgs e)
{
foreach (RepeaterItem ri in Repeater.Items)
{
foreach (Control c in ri.Controls)
{
if (typeof(CheckBox) == c.GetType())
{
CheckBox checkBox = (CheckBox)c;
checkBox.Checked = true;
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.