2015-06-07 51 views
1

我的ASP.NET項目調用REST客戶端庫函數,該回調應該調整標籤。但是在調用回調之後,asp標籤不會更改或更新。回調可能嗎?如何在代碼後面的回調函數中更新標籤?

的Default.aspx:

<asp:UpdatePanel runat="server" id="UpdatePanel1"> 
    <ContentTemplate> 
     <asp:Button OnClick="connect" Text="Connect" runat="server" /> 
     <asp:Label runat="server" Text="Label to be changed" id="Label1"> 
     </asp:Label> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Default.aspx.cs:

public void connect(object sender, EventArgs e) 
{ 
    Program restCLient = new Program(); 
    restCLient.startConnection(writeToConsole); 
} 

public void writeToConsole(string str) 
{ 
    Label1.Text = str; 
} 

Programm.cs:

public void startConnection(Action<string> callbackLog) 
{ 
    callbackLog("result"); 
} 
+0

你嘗試調試如果writeToConsole被調用? – Sherlock

+0

是的,它被稱爲 – tvelop

+0

你的writeToConsole函數應該在Program.cs中我猜, – Sherlock

回答

1

Label1的不REF在startConnection中,它會有一個新的實例。最好的方法是從startConnection返回一個字符串,並在connect()方法中更改標籤。

一種解決方法是將調用頁面實例作爲參數發送到startConnection方法,並調用該參數的方法。假設你的頁面類被稱爲默認和Programm.cs是在同一個應用程序,你可以使用這樣的事情:

public void startConnection(ref Default callingPage) 
{ 
    callingPage.writeToConsole("result"); 
} 

那麼你會這樣調用方法:

restCLient.startConnection(this); 
+0

在調試中,它向我顯示Label1被引用。但也許該頁面不會更新?返回字符串是沒有選擇的,因爲我需要在加載過程中返回其中的很多。 – tvelop

+0

當從startConnection調用writeToConsole時,它會創建一個Default.aspx.cs的新實例並調用該方法,因此對其控件的所有更改都不會反映在實際調用頁上,請嘗試調試Label1值並查看該值在restCLient.startConnection(writeToConsole)後更新;被執行。 您也可以從該方法返回一個List <>的值。 –

+0

好的,案件關閉。我再次測試,正在更改的標籤取決於default.aspx的新實例。感謝這個提示!所以我不能在這裏使用回調函數。你知道這個工作嗎?我儘量避免修改包括program.cs在內的庫項目... – tvelop

相關問題