2009-06-18 91 views
1

我有一個子文件夾,它具有一個aspx頁面和一個web.config文件,該文件覆蓋根目錄中web.config中的連接字符串。問題是,如果aspx頁面包含任何用戶控件,則用戶控件仍會從根目錄中的web.config中獲取連接字符串。無論如何強迫他們使用父aspx頁面使用的web.config?Web.config覆蓋不影響用戶控件

回答

2

我想你的用戶控件位於根目錄或沒有web.config的目錄中,因此它們使用根web.config。問題的原因是這樣的。

對於解決方案,我認爲在您的頁面中,您可以通過屬性爲其用戶控件設置連接字符串。或者,您可以讓用戶控制通過方法訪問頁面上的連接字符串。

0

如果它只是一個連接字符串(或者只是幾個設置變量),您可以將它們從父頁面傳遞給您的控件。

在包含麻煩的用戶控制你的頁面,你可以參考控制在你的aspx頁面,然後在初始化你的aspx頁面和控件,您可以覆蓋在連接字符串中它的構造器/自定義函數

在你的aspx頁面

<%Reference Src="path/to/your/control"%> 

代碼側(CSS)

// - check if this works first 
ASP.class_name_of_control_ascx(override_connection_string); 

// Other wise - created place holder on page for control/find control on page 
UserControl ctrl = new ASP.class_name_of_control_ascx(); 
PlaceHolderOnPage.Controls.Add(ctrl); 
((ASP.class_name_of_control_ascx)ctrl).RunMethod(override_connection string); 

,然後選擇控制方,只要設置你的默認構造函數和一個覆蓋構造函數來接受來自父aspx頁面的連接字符串。

在您的控制中,您將使用此覆蓋連接字符串。

1

我猜你的用戶控制在用戶控件的實現直接從web.config讀取的地方。然而,這將信息綁定到與用戶控件確實有關的用戶控件。 (信息是如何獲取連接字符串,而不是連接字符串本身)。該綁定違反了單一的resposibility原則,並(間接)是什麼導致你的問題。而不是讀取用戶控件內部的連接。將連接字符串公開爲屬性,並在實例化控件時讓頁面對其進行設置。

讓它進一步進入行爲良好的設計。你的用戶控件應該甚至不應該知道連接字符串,而應該有一個工作者類,或者甚至更好,你可能想要重寫爲顯示目的設置控件,用於檢索數據的工作人員以及將檢索到的數據綁定到你的機制控制。