大家好我在后面的代码中有一个名为CheckDate()的子程序。
如何从javascript函数调用该子例程?
干杯,
-Jonesy
答案 0 :(得分:2)
您无法直接将其称为函数调用。 因为Javascript是一个针对Web浏览器的脚本语言。
您可以使用AJAX或整页发送参数来允许您执行子程序。
阅读有关Ajax的更多信息,这是更好的方法。
答案 1 :(得分:1)
为了扩展Kronass所说的内容,我发现这篇文章过去对你想要的事情有用http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/。如果你做一些搜索
,Encosia还有很多其他的博客图您要使用的内容通常称为WebMethod,ScriptMethod或Page Method,具体取决于您正在使用的框架
答案 2 :(得分: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和服务器端代码。 ClientScriptManager的GetCallbackEventReference函数会在我们的页面中注入一些脚本,用于处理浏览器和服务器之间的通信。然后我们只需要注册一个调用注入脚本的脚本块 - 我们将调用此函数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 checkDate函数,它将把用户选择的日期传递给回调函数。
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';
}
}