Передача экземпляра совместно используемому методу в VB.NET - PullRequest
3 голосов
/ 04 ноября 2010

Я был глубоко вовлечен в работу существующего проекта VB.NET. Я никогда раньше не пользовался VB.NET, поэтому немного борюсь. Кто-нибудь знает, как решить следующее.

Мне нужно передать экземпляр на сторону клиента, а затем передать его общему методу, чтобы получить доступ к методам экземпляра с момента, когда этот метод использовался.

Отправной точкой является элемент управления загрузкой файлов в HTML-файле моего файла Contacts.aspx:

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

Событие onchange вызывает метод javascript, см. Ниже, в нем используются методы PageJetX AJAX для вызова метода Shared в моем коде

Это код скрипта, который находится в моем файле 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

Если кто-нибудь знает решение, пожалуйста, они могут обновить код, поскольку я, вероятно, не смогу понять, если вы просто дадите описание. Я просто надеюсь, что иду по правильному пути.

1 Ответ

2 голосов
/ 04 ноября 2010

Если я вас правильно понимаю, вы хотите получить доступ к классу (вашему instance), созданному в жизненном цикле страницы ASP.Net из вашего PageMethod - например, созданному во время начальной загрузки страницы или загрузки файла и т. Д.

Это невозможно напрямую, так как PageMethods не проходят полный жизненный цикл страницы (по сути, это веб-сервисы). Поэтому вам нужно передать клиенту какой-то идентификатор, который при передаче обратно на сервер в 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);
 }
...