salut gens j'ai un sous-programme appelé CheckDate() dans le code derrière.appelez un sous-programme vb.net à partir d'une fonction javascript?
Comment appeler ce sous-programme à partir d'une fonction javascript?
Cheers,
-Jonesy
salut gens j'ai un sous-programme appelé CheckDate() dans le code derrière.appelez un sous-programme vb.net à partir d'une fonction javascript?
Comment appeler ce sous-programme à partir d'une fonction javascript?
Cheers,
-Jonesy
Vous ne pouvez pas appeler directement appel de fonction. car Javascript est un langage de script destiné aux navigateurs Web.
Vous pouvez utiliser AJAX ou la publication d'une page entière en envoyant les paramètres pour vous permettre d'exécuter la sous-routine. En savoir plus sur Ajax c'est la meilleure façon de faire.
Pour développer ce que Kronass a dit ici, j'ai trouvé cet article pour être utile dans le passé pour faire ce que vous voulez http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/. Encosia a aussi un tas d'autres parcelles de blog sur ce si vous faites un peu de recherche
Qu'est-ce que vous cherchez à utiliser est normalement appelé WebMethod, ScriptMethod ou page Méthode selon le cadre que vous utilisez
Pour ce faire, vous pouvez utiliser l'interface ICallbackEventHandler. J'ai vu que vous aviez une question concernant l'AjaxControToolkit CalendarExtender l'autre jour, donc je suppose que cette question est liée à cela et comment vous faites une validation dans une méthode côté serveur. ICallbackEventHandler est AJAX, mais vous pouvez écrire votre validation en tant que méthode normale et non en tant que PageMethod/WebMethod. C'est un peu plus compliqué du côté Javascript, mais pas de beaucoup.
Commençons par notre base et le calendrier textbox d'extension:
<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>
J'ai ajouté l'attribut OnDateSelectionChanged de l'extension car cela donnera le coup d'envoi du processus d'appel de la méthode côté serveur; nous reviendrons à ce qui s'y passe bientôt.
Dans la déclaration de classe dans votre code-behind, vous devez dire que vous implémentez l'interface:
Partial Public Class _Default
Inherits System.Web.UI.Page
Implements ICallbackEventHandler
Pour implémenter l'interface nous avons besoin alors d'ajouter deux autres méthodes pour gérer les deux méthodes l'interface, RaiseCallbackEvent et GetCallbackResult. Nous avons également besoin d'une propriété pour un peu de stockage temporaire de la date que nous essayons de valider.
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
Il y a un bit de côté serveur, nous devons ajouter, dans Page_Load, qui fait l'accrochage en place du code côté serveur Javascript et. La fonction GetCallbackEventReference de ClientScriptManager injecte un peu de script dans notre page qui prend en charge la communication entre le navigateur et le serveur. Ensuite, nous avons juste besoin d'enregistrer un bloc de script qui appelle le script injecté - nous appellerons cette fonction 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
Retour aux bits côté client. Nous devons écrire une fonction Javascript checkDate qui passera la date sélectionnée par l'utilisateur dans le rappel.
function checkDate()
{
// Get the date the user selected
var selectedDate = document.getElementById('DateTextBox').value;
// This will start the callback sequence
checkDateOnServer(selectedDate);
}
Le dernier bit que nous devons faire est de recevoir la valeur revenant du serveur, que nous avons dit dans Page_Load serait appelé 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';
}
}