我在頁面加載中生成了一些head html,因此我查詢了一次數據庫。在頁面中,我再次查詢數據庫並將數據放入帶有內聯代碼的html中。變量後面的asp.net代碼
我的問題是有沒有更好的方法來做到這一點?我不想每次都查詢數據庫,並從內聯代碼伸出這些填充的變量。像page.addVariable在Page_Load中,並達到那些內嵌像page.variables [「VARIABLENAME」]
在此先感謝
我在頁面加載中生成了一些head html,因此我查詢了一次數據庫。在頁面中,我再次查詢數據庫並將數據放入帶有內聯代碼的html中。變量後面的asp.net代碼
我的問題是有沒有更好的方法來做到這一點?我不想每次都查詢數據庫,並從內聯代碼伸出這些填充的變量。像page.addVariable在Page_Load中,並達到那些內嵌像page.variables [「VARIABLENAME」]
在此先感謝
如果我理解你的要求,你可以做一個訪問並將其設置爲受保護。這將允許您從頁面訪問它。
如果您想防止在回調中調用數據庫,您可以隨時將信息添加到頁面上的視圖狀態。
的視圖狀態,隱藏域和cookie信息: http://www.csharphelp.com/archives/archive207.html
我認爲viewstate是最好的方式,因爲它關於該頁面的所有內容不是會話或應用程序。當我試圖添加並從視圖狀態獲取ProfileCommon時,它會拋出 System.Runtime.Serialization.SerializationException:在程序集'App_Code ._- aako5a,版本= 0.0.0.0,Culture = neutral,PublicKeyToken = null'中鍵入'ProfileCommon'標記爲可序列化。 異常? – 2009-11-11 13:58:07
這是一個序列化問題,我會嘗試找到一個鏈接來討論它,並在一段時間內完成它。 – kemiller2002 2009-11-11 14:06:21
我不知道這是否是你追求的,但你可以使用一個HiddenField
來存儲你想要的任何數據頁。
此外,如果您不需要它在頁面上,則可以使用Session或ViewState。
下面是使用ViewState的一個屬性的示例(NB可以互換使用會話的ViewState,看看我給你兩個之間的說明的鏈接。):
public string YourProperty
{
get
{
object content = ViewState["YourProperty"];
if (content == null)
{
return string.Empty;
}
return content.ToString();
}
set
{
ViewState["YourProperty"] = value;
}
}
注意,任何事情你放入ViewState
或SessionState
必須標記爲可序列化。
如果這是一個相當簡單的課程,只需用[Serializable]
標記標記該課程即可。
這不會用作對象!=字符串。最好做一些像'return(string)(ViewState [「YourProperty」] ??「」)' – 2009-11-11 13:37:50
是的。 ViewState作爲一個對象返回。我更喜歡先對返回的對象進行比較,以確保有值。這樣我就不必依賴設置值來使用它/檢查它。也許使用??符號會稍微清理代碼,但它是我從未成爲粉絲的那些符號之一。 – GenericTypeTea 2009-11-11 13:48:22
@Jan,每個對象都有一個ToString方法。 – 2009-11-11 14:40:03
從數據庫頁面檢索的數據是特定的,用戶特定的還是全局的到整個應用程序?
如果數據是用戶特定的,您可以使用Session State。
如果數據是整個應用程序的全局數據,您可以使用Application State。
無論您使用哪種方式,都可以在Global.asax文件中實現Session_Start
(將只針對每個用戶調用一次)或Application_Start
(僅在Web應用程序啓動時將調用一次)事件中的數據檢索。
其關於該頁面和viewstate是最好的方式去。但現在我得到關於ProfileCommon不可序列化的例外:) – 2009-11-11 14:06:00
你能爲我們獲取代碼片段嗎? – JustLoren 2009-11-11 13:28:38