2011-08-19 53 views
1

在一個父類中,我調用了一個在子類中定義的函數,並解析了我需要的值。C#asp.net textbox.text沒有設置?

ParentClass.ascx

protected void Page_Load 
{  
    if(info != null) 
    ControlIWantToGetInformationTo.SetInfo(info); 
} 

ChildClass.ascx

public void SetInfo(Info info) 
{ 
    someTextBox.Text = info.TheVariableWithin.ToString(); 
} 

我所知的是,該父類(控制)加載並執行方法,但是當ChildClass(控制)頁面加載它將以前設置的變量重置爲null,我該如何解決這個問題?

+0

你如何設置控件內的文本值?您必須確保代碼以正確的順序運行,但由於頁面生命週期規則複雜,ASP.Net webforms可能會非常複雜。 –

+0

Ahh聽起來像是我遇到的問題:'(你是說我必須分解所有東西嗎? – Anicho

+1

快速修復可能是將您目前在Page_Load中的代碼移動到PreRender事件,該事件發生在生命週期,但這不是一個很好的解決方案,因爲一旦你必須依靠在控制器中使用PreRender,它就會崩潰 –

回答

2

使用Session。在您的方法中,不要設置控件的值,而應使用對象並填充對象的屬性,並在完成後將其保存到Session中。在您的子類中,將您保存到Session中的對象的值加載到Session中。

//Parentclass 
protected void Page_Load 
{  
    if(info != null) 
    { 
    MyControlObject myObj = new MyControlObject(); 
    myObj.prop1 = txt1.Text; 
    myObj.prop2 = txt2.Text; 
    Session["myObj"] = myObj; 
    } 
} 

//Childclass 
public void SetInfo(Info info) 
{ 
    MyControlObject myObj = Session["myObj"] as MyControlObject; 
    if(myObj != null) 
    { 
    //assign the values to your controls 
    Session["myObj"] = null; //when you are done, clear the session. 
    } 
} 
+0

如何在創建和使用會話後銷燬會話? – Anicho

+1

會話[「myObj」] = null;只需編輯我的答案 – Pabuc

+0

感謝+1,因爲解決方案有效,將等到GMT +0午夜時間接受一個回答避免會話和PreRender事件的答案。 – Anicho

0

我認爲你正面臨着區分大小寫的問題。

試試這個

someTextBox.Text = info.TheVariableWithin.ToString(); 
+0

這只是一個錯字,抱歉修復 – Anicho