0
我有一個Repeater
和一個Button
控件。內Repeater
我有一個HiddenField
控制:在回發後在Repeater中複製ASP.NET 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
的值被設置爲「TestValue」。
問題發生在回發上。如果我點擊保存按鈕,ItemDataBound
事件處理程序再次被觸發,並且HiddenField
的值再次被設置,但是保持原始值並且最終得到值「TestValue,TestValue」。我已將HiddenField
換成標籤控件,並且此bahaviour不會發生。
我已經遍歷代碼,並且當ItemDataBound
事件處理程序在回發時觸發,HiddenField
沒有值。
任何幫助表示讚賞。
不要使用'(HiddenField)e.Item.Controls [0] .FindControl( 「hfReportId」);''但(HiddenField)e.Item.FindControl( 「hfReportId」 );'。他的RepeaterItem是NamingContainer,所以這是更安全的。嘗試以聲明方式註冊事件:'' –
另外,您是否使用JQuery和/或ASP.NET Ajax?這是一個jQuery UI對話框中的轉發器嗎? –
是的 - 我正在使用ASP.NET Ajax。這似乎是問題的原因 - 當我刪除它時,HiddenField按預期更新。似乎HiddenField控件的處理方式與標籤控件不同? – Ash