2016-05-03 3 views
0

У меня есть Ajax на веб-странице, которая передает некоторые данные на серверный метод VB.Net. После того, как эти данные относятся к серверному методу, мне нужно вызвать другой метод на стороне сервера, чтобы использовать данные, которые я только что собрал. Вот очень упрощенный пример:VB.Net: вызов sub из общего доступа

' 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) дает мне ошибку «Не удается обратиться к члену экземпляра ...». Итак, можно ли сейчас позвонить Protected Sub DisplayAwesome с Public Shared Sub GetAwesome? Я надеюсь остаться рядом с таким решением, потому что он будет хорошо работать с приложением, поскольку он уже написан другим сотрудником.

+0

Удалены из общей декларации 'GetAwesome()' – djv

ответ

1

К сожалению, вы не можете этого сделать, так как метод страницы DisplayAwesome определяется как Protected, и вам нужен экземпляр класса для доступа к методу Protected. Но изменения в другом экземпляре не отразятся в текущем пользовательском интерфейсе. другое, что вы можете сделать, это сделать DisplayAwesome как общий, но на этот раз вы не можете получить доступ к элементам пользовательского интерфейса внутри общей функции.

Вещь, которую Вы можете сделать в этой ситуации, вернуть данные к вызываемому методу (в передней части) и обрабатывать подлодку litAwesomeResult.Text там

+0

Ах да, я пытался избежать этого. В принципе, существует огромный метод под названием 'doSave()', который должен запускаться после ввода Ajax. Итак, мне нужно написать значение для страницы, а затем запустить большой 'doSave()'. – mrcoulson

+0

«Поскольку метод страницы DisplayAwesome определяется как« Защищенный »должен быть« Поскольку метод страницы DisplayAwesome не определен как «Общий», поэтому вам нужен экземпляр ... » – djv

+0

Итак, мое решение будет немного из того, что я не сделал но это требует наименьшего количества переписывания. Мы помещаем скрытую кнопку на странице (ugh) с помощью метода 'doSave()', связанного с ним. Когда функция Ajax получает успех, мы используем JavaScript, чтобы щелкнуть кнопку, которая вызывает 'doSave()'. Мне это не нравится, но это работает. – mrcoulson

0

вызова с именем формы класса, как это:

FormName.DisplayAwesome(VBInputText) 

В VB.Net вы можете вызвать метод, не разделяемый совместно используемым методом с именем класса формы по умолчанию, поскольку экземпляр по умолчанию представляет собой объект Тип формы, который создает и управляет им приложением формы приложения VB при добавлении формы к проекту.

Для получения дополнительной информации см это:

VB.NET Default Form Instances

+0

Вы не можете сделать это, так как это не метод 'shared', вам нужно создать экземпляр для доступа к методу –

+0

Вы можете сделать это из другого общего метода! Вы можете проверить это! –

+0

Не могли бы вы объяснить, как это можно достичь? –

Смежные вопросы