从javascript函数调用vb.net子路由?

时间:2010-04-05 15:59:44

标签: asp.net javascript vb.net

大家好我在后面的代码中有一个名为CheckDate()的子程序。

如何从javascript函数调用该子例程?

干杯,

-Jonesy

3 个答案:

答案 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';
        }
    }