我正在使用一个TabContainer控件,它包含一个usercontrol,它根据所选的选项卡动态呈现。在usercontrol里面我有一个转发器,它包含一个复选框,标签和隐藏字段。我正在更新/更改itemdatabound事件中这些字段的值。
第一次加载页面时,一切正常,但如果我重新绑定转发器,那么只有标签值正在变化,复选框/隐藏字段包含一些旧值。
我根本没有使用任何更新面板。请告诉我我做错了什么。下面是我在itemdatabound中的代码片段。
protected void rptrIngrList_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
try
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
SimpleIngredientObject currentItem = e.Item.DataItem as SimpleIngredientObject;
HiddenField hiddenIngrId = (HiddenField)e.Item.FindControl("hdnIngrId");
hiddenIngrId.Value = currentItem.IngredientId.ToString();
HiddenField hdnAltIngrId = (HiddenField)e.Item.FindControl("hdnAltIngrId");
hdnAltIngrId.Value = currentItem.IngrAltId.ToString();
HtmlGenericControl span = (HtmlGenericControl)e.Item.FindControl("abcd");
if (currentItem.UserIngrAvailability == 0 || currentItem.UserIngrAvailability == null)
span.InnerText = GetAvailabilityChar(currentItem.IngrAvailabilityId);
else
span.InnerText = GetAvailabilityChar(currentItem.UserIngrAvailability);
Label lblIngrName = (Label)e.Item.FindControl("LabelIngredientName");
lblIngrName.Text = currentItem.IngredientName;
CheckBox chkIngrUse = (CheckBox)e.Item.FindControl("chkIngrUsage");
// chkIngrUse.Checked = (currentItem.IngrMarked == null) ? false : (currentItem.IngrMarked == true) ? true : false;
chkIngrUse.Checked = Convert.ToBoolean(System.Web.UI.DataBinder.Eval(e.Item.DataItem, "IngrMarked"));
}
}
答案 0 :(得分:0)
您可以分享您尝试保存数据的代码吗?在保存新表单数据之前,您似乎正在重新绑定旧值。
答案 1 :(得分:0)
当Databind()发生时,Repeater只会触发ItemDataBound - 所以你必须在转发器上调用databind()。因此,如果您未手动调用Databind(),则不会触发代码。数据源可用后,它将遍历每个项目并调用itemdatabound事件。这就是为什么你可以看到DataItem值(它是数据源中的对象)的原因。
答案 2 :(得分:0)
我在 asp:repeater 中的 asp:HiddenField 遇到了同样的问题。 问题是:在 PostBack 上,我的 asp:Repeater 中的值在 Page_Load() 方法而不是 ButtonSearch_click() 事件方法中使用 DataBind() 刷新。这就是为什么我仍然在我的 HTML 表格的 asp:HiddenField 和 asp:CheckBox 中获得旧值。