0

我有一个Repeater和一个Button控制。在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事件处理程序绑定RepeaterPage_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设置为“TestValue”。

回发时出现问题。如果我单击“保存”按钮,ItemDataBound事件处理程序将再次触发,并再次HiddenField设置 的值,但保留原始值并最终得到“TestValue,TestValue”值。我已经将标签控件换成HiddenField了标签控件,并且这种行为没有发生。

我已经单步执行了代码,当ItemDataBound事件处理程序在回发时触发时,HiddenField.

任何帮助表示赞赏。

4

2 回答 2

0

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

于 2021-04-12T14:08:00.140 回答
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");

快乐编码

于 2015-10-08T10:24:06.720 回答