2012-02-10 120 views
0

我創建了用於級聯兩個下拉列表「省」和「城市」的用戶控件。但每次當我運行它,錯誤消息說「類型的未處理的異常‘System.StackOverflowException’發生」 這裏是我的用戶控件的代碼將變量傳遞給用戶控件

public partial class cascadingdropdownlist : System.Web.UI.UserControl 
{ 
    public string province_selectedvalue 
    { 

     set 
     { 
      string province_selectedvalue = value; 
     } 
     get 
     { 
      return city_selectedvalue; 
     } 
    } 

    public string city_selectedvalue 
    { 
     set 
     { 
      string city_selectedvalue = value; 
     } 
     get 
     { 
      return city_selectedvalue; 
     } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     string a = province_selectedvalue; 
     ............ 
    } 

}

在主頁

<uc1:cascadingdropdownlist ID="province_city" runat="server" OnPreLoad="province_city_OnPreLoad"/> 

後面的代碼是

protected void province_city_OnPreLoad(object sender, EventArgs e) 
    { 
     province_city.province_selectedvalue = myReader["Province/State"].ToString(); 
     province_city.city_selectedvalue = myReader["City"].ToString(); 
    } 

急診室ror在調用用戶控件province_selectedvalue.get方法時發生。爲什麼我不明白爲什麼?任何人都可以幫助我,非常感謝

+0

但如何先運行主機頁面代碼,然後加載用戶控件傳遞變量值? – pita 2012-02-10 17:38:21

回答

2

的問題是在你的財產:

public string city_selectedvalue 
{ 
    set 
    { 
     string city_selectedvalue = value; 
    } 

上city_selectedvalue一遍遍呼喚二傳手導致堆棧溢出(或者,消氣!)。

與此

public string city_selectedvalue { get; set; } 

我還以爲你可以做同樣的province_selectedvalue更換你的財產,但其吸氣劑是指city_selectedvalue - 是正確的?

+0

事實上,我認爲問題在於吸氣劑,因爲吸氣劑不會自我調節。無論如何,使用自動屬性將解決問題。 – onof 2012-02-10 14:49:25

+0

謝謝,錯誤消失了,但還有另一個問題,我想使用OnPreLoad(也許是另一種方法)首先在主機頁面中設置province_selectedvalue。它似乎仍然首先加載用戶控件,因此值「province_selectedvalue」爲空 – pita 2012-02-10 15:11:43

+0

嗯,這可能與控件與頁面生命週期有關。控件的OnLoad後,頁面的OnLoad事件觸發,因此您必須對此進行說明。 http://msdn.microsoft.com/en-us/library/ms178472.aspx – n8wrl 2012-02-10 18:30:18

0

由於代碼處於不定式循環中,您正在收到該錯誤。當你調用province_selectedvalue.get時,你正在調用city_selectedvalue get。而且你在你認爲你打電話的變量中的屬性名稱相同,因此它一次又一次地調用相同的名稱。

更改您的代碼

public string city_selectedvalue { get; set; } 

而且

public string province_selectedvalue { get; set; }