回发后,ASP.NET HiddenField值在Repeater中重复

时间:2015-10-08 09:44:46

标签: c# asp.net repeater hiddenfield itemdatabound

我有RepeaterButton控件。在Repeater内我有一个HiddenField控件:

<asp:Repeater runat="server" ID="rptItems">           
    <ItemTemplate>                          
        <asp:HiddenField runat="server" ID="hfReportId"></asp:HiddenField>
    </ItemTemplate>
</asp:Repeater>

<asp:Button runat="server" ID="btnSave" Text="Save" /> 

在后面的代码中,我将ItemDataBound事件处理程序绑定到Repeater

中的Page_Load:
this.rptItems.ItemDataBound += new RepeaterItemEventHandler(rptItems_ItemDataBound);

在事件处理程序中,我以编程方式设置HiddenField控件的值:

protected void rptItems_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
    {
        var hfReportId = (HiddenField)e.Item.Controls[0].FindControl("hfReportId");
        hfReportId.Value = "TestValue";
    }    
}

到目前为止,这是按预期工作的,HiddenField的值设置为&#34; TestValue&#34;。

回发时出现问题。如果单击“保存”按钮,将再次触发ItemDataBound事件处理程序,并再次设置HiddenField的值,但保留原始值并且最终得到的值为&# 34;测试值,测试值&#34 ;.我已经将HiddenField替换为标签控件,但这种行为不会发生。

我已经介入了代码,当ItemDataBound事件处理程序在回发时触发时,HiddenField没有值。

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

您必须在aspx页面中绑定在转发器中绑定的项目数据事件,如

OnItemDataBound="repeater_ItemDataBound"

在绑定转发器时使用页面加载ispostback属性

if(!IsPostback)
{
   //Bind repeater
}

然后在项目数据绑定中使用

var hfReportId = (HiddenField)e.Item.FindControl("hfReportId");

而不是

var hfReportId = (HiddenField)e.Item.Controls[0].FindControl("hfReportId");

快乐编码

答案 1 :(得分:0)

我在 asp:Repeater 中的 asp:HiddenField 遇到了同样的问题。 问题是: 在 PostBack 上,我的 asp:Repeater 中的值在 PageLoad() 方法而不是 ButtonSearch_click() 事件方法中使用 DataBind() 刷新。 这就是为什么我仍然在我的 asp:Repeater 的 asp:HiddenField 中获得旧值。