2010-11-04 30 views
3

我已經在工作中使用現有的VB.NET項目在深處拋出了。我從來沒有使用VB.NET,所以我掙扎了一下。有誰知道如何解決以下問題。將實例傳遞給VB.NET中的共享方法

我需要將一個實例傳遞給客戶端,然後將它傳遞給共享方法以便從共享方法時訪問實例方法。

的出發點是我Contacts.aspx文件的HTML內的FileUpload控件:

<asp:FileUpload ID="DocUpload1" runat="server" onchange="CallMe();" /> 

onChange事件調用JavaScript方法,下面看到的,這個使用AJAX PageMethods來調用共享的方法我背後

該代碼腳本代碼這是我Contact.aspx文件

<script language="javascript"> 
     function CallMe() { 
      // call server side method 
      PageMethods.GetContact(0, CallSuccess, CallFailed, null); 
     } 

     // set the destination textbox value with the ContactName 
     function CallSuccess(res, destCtrl) { 
     } 

     // alert message on some failure 
     function CallFailed(res, destCtrl) { 
      alert(res.get_message()); 
     }   

</script> 

這是一個例子類的我想要做的事情的類型,我想我需要使用「實例作爲聯繫人」作爲WebMethod函數的輸入參數,但我不知道如何將實例傳遞給它:

這是我的Contacts.aspx.vb文件中的類。

Partial Class Contacts 

    <System.Web.Services.WebMethod()> _ 
    Public Shared Function GetContact(ByVal instance As Contacts) As String 
     Return instance.GetContactName() 'This is an instance class which I need to call. 
    End Function 

    'This is my instance class which I want to call from the Shared Class. 
    Public Shared Function GetContactName() As String 
     Return "Fred Bloggs" 
    End Function 

End Class 

如果有人知道解決方案,請他們更新代碼,因爲我可能無法理解,如果你只是給一個描述。我只是希望我走在正確的軌道上。

+0

我真的不明白你實際上在做什麼。什麼是類(JS或VB.Net)的聯繫人,爲什麼你需要將它傳遞給服務器,爲什麼你不能在客戶端調用GetContactName(如果它是JS類的)? 如果它是一個.Net類,你應該傳遞ContactID(如果類似的東西可用)到WebMethod並在服務器端創建一個實例。 – 2010-11-04 11:35:06

回答

2

如果我理解正確的話,你要訪問一個類(您instance)從PageMethod在ASP.Net頁面生命週期創造的 - 例如,在初次載入網頁或文件中創建的上傳等

這並不是直接可能的,因爲PageMethods不會經歷整個頁面的生命週期(它們本質上是web服務)。因此,您需要將某種標識符傳遞給客戶端,當傳回給服務器的PageMethod時,可以用來重新創建或檢索您的instance

如在初始頁面加載:

session("ContactID") = instance 

你PageMethod的可能看起來像:

Public Shared Function GetContact(ByVal key As String) As String 
    Return HttpContext.Current.Session(key).GetContactName() 
End Function 

其中參數key是您用來實例存儲在會話狀態相同的密鑰。

在你的JavaScript:

function CallMe() { 
      // call server side method 
      PageMethods.GetContact('ContactID', CallSuccess, CallFailed, null); 
} 
+0

我從項目中抽出來做一些其他的工作,但現在我回來了,很高興看到我一直在尋找的答案。非常感謝!! – EnterpriseMonkey 2011-01-27 07:53:17

+0

@EnterpriseMonkey - 很高興有幫助。你可以投票並接受答案以表示你的讚賞:) – 2011-01-27 08:04:32