CheckBox和隐藏字段值不在Repeater中更新

时间:2016-05-06 07:51:42

标签: asp.net checkbox repeater viewstate hidden-field

我正在使用一个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"));

            }
        }

3 个答案:

答案 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 中获得旧值。