2010-11-04 26 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