【发布时间】:2010-04-05 00:06:06
【问题描述】:
我想要做的是遍历转发器并读取一些控件值:
foreach (RepeaterItem iter in TablePanier.Items)
{
string guid = ((HiddenField)iter.FindControl("guid")).Value.ToString();
// nombre exemplaires du livre
int nbExemplaires = int.Parse(((System.Web.UI.WebControls.TextBox)iter.FindControl("txtNbExemplaires")).Text.ToString());
}
如您所见,我有一个 HiddenValue 和一个 TextBox。不幸的是,这不起作用,没有正确读取值。
怎么了?
谢谢!
编辑: 这是表单的完整代码:
public partial class Panier : System.Web.UI.Page
{
Bussiness.Manager _manager = new Bussiness.Manager("MSSQLSERVER");
IEnumerable<Bussiness.iPanier> _paniers;
CurrencyConvertor _currencyConvertor = new CurrencyConvertor();
Bussiness.iCommande _commande;
int idPanier;
protected void Page_Load(object sender, EventArgs e)
{
if (Session["login"] != null)
{
Security security = new Security();
_paniers = _manager.chargerPannierUtilisateur(Session["login"].ToString());
foreach (Bussiness.iPanier p in _paniers)
{
idPanier = p.id;
TablePanier.DataSource = p.Livres;
TablePanier.DataBind();
}
}
else
{
Response.Redirect("~/Accueil.aspx");
}
}
protected void btnCommande_Click(object sender, EventArgs e)
{
foreach (RepeaterItem iter in TablePanier.Items)
{
// id livre courant
if (iter.ItemType == ListItemType.Item || iter.ItemType == ListItemType.AlternatingItem)
{
string guid = ((HiddenField)iter.FindControl("guid")).Value.ToString();
int nbExemplaires = int.Parse(((System.Web.UI.WebControls.TextBox)iter.FindControl("txtNbExemplaires")).Text.ToString());
}
}
}
}
如您所见,转发器绑定在构造函数级别。当页面的按钮上发生事件时,我正在尝试读取数据。
有什么想法吗?
【问题讨论】:
-
代码看起来不错 - 你从哪里调用它?如果在转发器数据绑定之前调用它,控件将没有值。
-
我看不出您粘贴的代码有什么问题。当您说这些值“未正确读取”时,您是什么意思?
-
@Ray:中继器数据绑定后。 @Matti virkkunen:未读取值!
-
你在调试器中看过这个吗? FindControl 工作吗?你在回发中调用这个吗?如果您可以显示您正在执行的事件和方法调用的顺序,包括数据绑定和您发布的代码,那么也许有人会发现问题。
-
这样的代码示例可以正常工作。问题可能在于您在生命周期中尝试访问 RepeaterItems 的位置。