簡體   English   中英

使用Repeater_ItemCommand訪問公共屬性

[英]Accessing a public property from with Repeater_ItemCommand

我有一個用戶控件,它有一個像這樣的公共屬性:

public string[] ImageIDArray {
    get;
    set;
}

在我的控制范圍內,我有一個轉發器,在轉發器內部,我有一個標准的asp.net按鈕。 單擊該按鈕時,我需要操作ImageIDArray屬性。 我使用ItemCommand事件處理程序。

問題是當ItemCommand處理程序運行時ImageIDArray為null。 所以,這里有2個問題。

1)在頁面生命周期的什么時候設置屬性(除非你以編程方式設置它們)2)如何解決這個問題。 我是否需要將值存儲在viewstate中?

在此先感謝Al

請看一下這篇文章。 Repeater.ItemCommand事件

我相信它包含您需要的相關信息。

整個頁面生命周期實際上是無狀態的,除了給出狀態感知的視圖狀態。 每次執行回發時都會重新創建頁面上的控件。 這篇 MSDN文章很好地解釋了它。 先前加載到渲染控件的數據保存在viewstate中(對於vs啟用的控件)並加載回它們,除非用戶在回發之前更改了它們。 如果用戶更改了它們並且您進行了回發,那么這些值將加載到LoadPostBackData事件中,該事件在填充視圖狀態后運行。 我不知道你在何時何地將數據加載到ImageIDArray中,但我假設你沒有在每次回發時加載它,這就是你的itemCommand事件處理程序中數據為空的原因。

要回答你的第一個問題,只要擁有一個屬性不會做任何事情,重要的是你設置它的價值。 如果要為ascx文件中的屬性賦值,它將保留在控件中。 否則,您必須每次都加載它。

在用戶控件的Page_Load事件上加載ImageIdArray page_Load事件在觸發ItemCommand事件之前運行。 如果您不想在每次回發時加載ImageArray ,可以考慮將其存儲在sessionviewstate 存儲在會話中意味着數據可供您用戶的會話持續時間。 只要您在該頁面上, ViewState持續。

您可以手動將數據添加到ViewState ,如ViewState["ImageIdArray"] = ImageIdArray. 或者你可以改變你的財產,

public string[] ImageIdArray

{

    get { return (string[])(ViewState["ImageIdArray"] ?? null); }

    set { ViewState["ImageIdArray"] = value; }

}

這里是解釋稍微介紹一下在asp.net狀態管理的文章。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM