2009-11-11 86 views
0

我在頁面加載中生成了一些head html,因此我查詢了一次數據庫。在頁面中,我再次查詢數據庫並將數據放入帶有內聯代碼的html中。變量後面的asp.net代碼

我的問題是有沒有更好的方法來做到這一點?我不想每次都查詢數據庫,並從內聯代碼伸出這些填充的變量。像page.addVariable在Page_Load中,並達到那些內嵌像page.variables [「VARIABLENAME」]

在此先感謝

+0

你能爲我們獲取代碼片段嗎? – JustLoren 2009-11-11 13:28:38

回答

3

如果我理解你的要求,你可以做一個訪問並將其設置爲受保護。這將允許您從頁面訪問它。

如果您想防止在回調中調用數據庫,您可以隨時將信息添加到頁面上的視圖狀態。

的視圖狀態,隱藏域和cookie信息: http://www.csharphelp.com/archives/archive207.html

+0

我認爲viewstate是最好的方式,因爲它關於該頁面的所有內容不是會話或應用程序。當我試圖添加並從視圖狀態獲取ProfileCommon時,它會拋出 System.Runtime.Serialization.SerializationException:在程序集'App_Code ._- aako5a,版本= 0.0.0.0,Culture = neutral,PublicKeyToken = null'中鍵入'ProfileCommon'標記爲可序列化。 異常? – 2009-11-11 13:58:07

+0

這是一個序列化問題,我會嘗試找到一個鏈接來討論它,並在一段時間內完成它。 – kemiller2002 2009-11-11 14:06:21

1

我不知道這是否是你追求的,但你可以使用一個HiddenField來存儲你想要的任何數據頁。

此外,如果您不需要它在頁面上,則可以使用SessionViewState

下面是使用ViewState的一個屬性的示例(NB可以互換使用會話的ViewState,看看我給你兩個之間的說明的鏈接。):

public string YourProperty 
{ 
    get 
    { 
     object content = ViewState["YourProperty"]; 
     if (content == null) 
     { 
      return string.Empty; 
     } 
     return content.ToString(); 
    } 
    set 
    { 
     ViewState["YourProperty"] = value; 
    } 
} 

注意,任何事情你放入ViewStateSessionState必須標記爲可序列化。

如果這是一個相當簡單的課程,只需用[Serializable]標記標記該課程即可。

+0

這不會用作對象!=字符串。最好做一些像'return(string)(ViewState [「YourProperty」] ??「」)' – 2009-11-11 13:37:50

+1

是的。 ViewState作爲一個對象返回。我更喜歡先對返回的對象進行比較,以確保有值。這樣我就不必依賴設置值來使用它/檢查它。也許使用??符號會稍微清理代碼,但它是我從未成爲粉絲的那些符號之一。 – GenericTypeTea 2009-11-11 13:48:22

+0

@Jan,每個對象都有一個ToString方法。 – 2009-11-11 14:40:03

0

從數據庫頁面檢索的數據是特定的,用戶特定的還是全局的到整個應用程序?

如果數據是用戶特定的,您可以使用Session State

如果數據是整個應用程序的全局數據,您可以使用Application State

無論您使用哪種方式,都可以在Global.asax文件中實現Session_Start(將只針對每個用戶調用一次)或Application_Start(僅在Web應用程序啓動時將調用一次)事件中的數據檢索。

+0

其關於該頁面和viewstate是最好的方式去。但現在我得到關於ProfileCommon不可序列化的例外:) – 2009-11-11 14:06:00

相關問題