2016-05-03 43 views
0

我在網頁上有一些Ajax,它將一些數據提供給服務器端的VB.Net方法。一旦這些數據在服務器端方法中,我需要調用另一個服務器端方法來使用我剛收集的數據。這裏是一個非常簡化的例子:VB.Net:從共享子調用子

' This method gets the input from the Ajax code on the web page. 
<System.Web.Services.WebMethod> _ 
Public Shared Sub GetAwesome(VBInputText As String) 
    Dim strTest As String = VBInputText 
    ' Now that we have collected input from the user, 
    ' we need to run a method that does a ton of other stuff. 
    DisplayAwesome(VBInputText) 
End Sub 

Protected Sub DisplayAwesome(AwesomeIn As String) 
    ' The real app does a lot more than this. For this example, it 
    ' just sets the text of a literal. 
    litAwesomeResult.Text = AwesomeIn 
End Sub 

當然,在上面的例子中DisplayAwesome(VBInputText)給了我「不能引用實例成員...」的錯誤。那麼,現在有可能從Public Shared Sub GetAwesome撥打電話Protected Sub DisplayAwesome?我希望能夠接近這種解決方案,因爲它可以在應用中發揮出色,因爲它已經由另一位同事編寫。

+0

從GetAwesome的'聲明()'刪除的共享 – djv

回答

1

不幸的是,您不能這樣做,因爲頁面方法DisplayAwesome被定義爲Protected並且您需要該類的一個實例來訪問Protected方法。但在另一個實例中的更改不會反映在當前的用戶界面中。您可以做的另一件事是將DisplayAwesome設爲共享,但是這次您無法訪問共享函數內的UI元素。

你可以在這種情況,數據返回到調用方法(在前端)做的事和處理與窗體類的名稱litAwesomeResult.Text

+0

噢,我試圖避免這種情況。基本上,有一個名爲'doSave()'的巨大方法需要在獲得Ajax輸入後運行。所以,我需要寫一個值到頁面,然後運行大'doSave()'。 – mrcoulson

+0

「由於頁面方法DisplayAwesome被定義爲受保護的」應該是「由於頁面方法DisplayAwesome沒有被定義爲Shared,所以你需要一個實例......」 – djv

+0

所以,我的解決方案將會有點我沒有想要做的,但它需要最少量的重寫。我們在頁面上放置一個隱藏的按鈕(ugh),並使用'doSave()'方法連接到它。當Ajax函數接收成功時,我們使用JavaScript來點擊調用'doSave()'的按鈕。我不喜歡它,但它有效。 – mrcoulson

0

呼叫子是這樣的:

FormName.DisplayAwesome(VBInputText) 

在VB.Net中,您可以通過默認實例調用不與共享方法名稱爲Form的共享方法,因爲默認實例是一個對象表單類型,VB應用程序框架在添加表單時創建並管理它到項目。

欲瞭解更多信息請參閱本:

VB.NET Default Form Instances

+0

你不能這樣做,因爲它不是'共享'方法,你需要創建一個實例來訪問方法 –

+0

你可以用另一個共享方法來做到這一點!你可以測試它! –

+0

請你解釋一下如何實現? –