2010-04-05 2 views

ответ

2

Вы не можете назвать это непосредственно, как вызов функции. , потому что Javascript - это скриптинг langauge, предназначенный для веб-браузеров.

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

Узнайте больше о Ajax, это лучший способ пойти.

1

Чтобы расширить то, что сказал Kronass, я нашел эту статью полезной в прошлом для того, чтобы делать то, что вы хотите http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/. Encosia также имеет кучу других участков блога на это, если вы немного поиска

Что вы хотите использовать, как правило, называют WebMethod, ScriptMethod или Page Метод в зависимости от рамках которой вы используете

1

Один из способов сделать это - использовать интерфейс ICallbackEventHandler. Я видел, что на днях у вас возник вопрос относительно AjaxControToolkit CalendarExtender, поэтому я предполагаю, что этот вопрос относится к этому вопросу и как вы выполняете некоторую проверку в методе на стороне сервера. ICallbackEventHandler - это AJAX, но вы можете написать свою проверку как обычный метод, а не метод PageMethod/WebMethod. Это немного более странно на стороне Javascript, но не на много.

Давайте начнем с нашего основного текстового поля и календаря удлинителя:

<form id="form1" runat="server"> 
<asp:ScriptManager runat="server" ID="ScriptManager" /> 
<div> 
<asp:TextBox runat="server" ID="DateTextBox" /> 
<ajaxtoolkit:CalendarExtender runat="server" ID="CalendarExtender" TargetControlID="DateTextBox" 
PopupButtonID="SelectorButton" OnClientDateSelectionChanged="checkDate" Format="dd MMM yyyy" /> 
<asp:ImageButton runat="server" ID="SelectorButton" ImageUrl="Path to a pretty graphic" /> 
<br /> 
<asp:Label runat="server" ID="ValidDateLabel" /> 
</div> 
</form> 

Я добавил OnDateSelectionChanged атрибут удлинителя, как это начнется процесс вызова метода на стороне сервера; мы вернемся к тому, что там происходит в ближайшее время.

В объявлении класса в коде-позади, вы должны сказать, что вы реализуете интерфейс:

Partial Public Class _Default 
    Inherits System.Web.UI.Page 
    Implements ICallbackEventHandler 

Для реализации интерфейса мы тогда нужно добавить еще два метода для обработки двух методов в интерфейс, RaiseCallbackEvent и GetCallbackResult. Нам также требуется свойство для небольшого временного хранения даты, которую мы пытаемся проверить.

Private mCallbackDate As Date 

Private Property CallbackDate() As Date 
    Get 
     Return mCallbackDate 
    End Get 
    Set(ByVal value As Date) 
     mCallbackDate = value 
    End Set 
End Property 

Public Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements ICallbackEventHandler.RaiseCallbackEvent 
    'eventArgument will contain the date the user selected from the extender 

    Dim testDate As Date 

    If eventArgument = String.Empty Then 
    Else 
     If Date.TryParse(eventArgument, testDate) Then 
      'If we have a legal date selected then store it 
      Me.CallbackDate = testDate 
     End If 
    End If 

End Sub 

Public Function GetCallbackResult() As String Implements ICallbackEventHandler.GetCallbackResult 

    Dim result As String = String.Empty 

    'Get the date that we stored in memory and pass it to our CheckDate function 
    'We'll pass back to the Javascript in the page the string 'true' if the date is 
    'valid under our business rules and 'false' if it isn't 
    If checkDate(Me.CallbackDate) Then 
     Return "true" 
    Else 
     Return "false" 
    End If 

End Function 

Public Function checkDate(ByVal dateToCheck As Date) As Boolean 

    'If the date is in the future then return True, otherwise False 
    If dateToCheck > Date.Today Then 
     Return True 
    Else 
     Return False 
    End If 

End Function 

Там еще один бит на стороне сервера мы должны добавить в Page_Load, который делает подключение в Javascript и серверного кода. Функция GetCallbackEventReference ClientScriptManager добавит немного скрипта на нашу страницу, которая будет обеспечивать связь между браузером и сервером. Тогда нам просто нужно зарегистрировать блок сценария, который вызывает введенный скрипт - мы будем называть эту функцию checkDateOnServer.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    Dim callbackScript As String 

    callbackScript = "function checkDateOnServer(arg){" & _ 
     Page.ClientScript.GetCallbackEventReference(Me, "arg", "receiveDateValidation", "") & _ 
     "}" 

    ClientScript.RegisterClientScriptBlock(Me.GetType, "callback", callbackScript, True) 

End Sub 

Назад к клиентским битам. Нам нужно написать функцию проверки JavaScript Javascript, которая будет передавать выбранную дату пользователя в обратный вызов.

function checkDate() 
    { 
     // Get the date the user selected 
     var selectedDate = document.getElementById('DateTextBox').value; 

     // This will start the callback sequence 
     checkDateOnServer(selectedDate); 
    } 

Последний бит нам нужно сделать, это получить значение приходя от сервера, который мы говорили в Page_Load будет называться receiveDateValidation.

function receiveDateValidation(arg, context) 
    { 
     var ValidDateLabel = document.getElementById('SelectedDateLabel'); 

     // We get a string value back from the server which is 'true' or 'false'   
     if (arg == 'true') 
     { 
      ValidDateLabel.innerText = 'Your date IS valid'; 
     } 
     else 
     { 
      ValidDateLabel.innerText = 'Your date IS NOT valid'; 
     } 
    } 
Смежные вопросы