2015-10-08 51 views
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事件處理程序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換成標籤控件,並且此bahaviour不會發生。

我已經遍歷代碼,並且當ItemDataBound事件處理程序在回發時觸發,HiddenField沒有值。

任何幫助表示讚賞。

+1

不要使用'(HiddenField)e.Item.Controls [0] .FindControl( 「hfReportId」);''但(HiddenField)e.Item.FindControl( 「hfReportId」 );'。他的RepeaterItem是NamingContainer,所以這是更安全的。嘗試以聲明方式註冊事件:'' –

+1

另外,您是否使用JQuery和/或ASP.NET Ajax?這是一個jQuery UI對話框中的轉發器嗎? –

+0

是的 - 我正在使用ASP.NET Ajax。這似乎是問題的原因 - 當我刪除它時,HiddenField按預期更新。似乎HiddenField控件的處理方式與標籤控件不同? – Ash

回答

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"); 

快樂編碼

相關問題