ASP.NET HiddenField值在回发后复制到中继器中

本文关键字:复制 中继器 NET HiddenField ASP | 更新日期: 2023-09-27 18:16:38

我有一个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事件处理程序绑定到Page_Load: 中的Repeater
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的值被设置为"TestValue"。

问题发生在回发时。如果我单击Save按钮,则再次触发ItemDataBound事件处理程序,并再次设置HiddenField的值,但是保持原始值,并且我最终获得"TestValue,TestValue"的值。我把HiddenField换成了标签控件,这种行为不会发生。

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

ASP.NET HiddenField值在回发后复制到中继器中

你应该在你的aspx页面的repeater中绑定事件项数据,如

OnItemDataBound="repeater_ItemDataBound"

使用page load ispostback属性绑定中继器

if(!IsPostback)
{
   //Bind repeater
}

then在条目数据绑定中使用

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

代替

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

快乐编码

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