65.9K
CodeProject 正在变化。 阅读更多。
Home

如何在 ASP.NET 中使用 JavaScript 回发到服务器

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2012 年 5 月 29 日

CPOL

1分钟阅读

viewsIcon

42782

downloadIcon

393

这是“如何在 ASP.NET 中使用 JavaScript 回发到服务器”的替代方案

引言

原文中的代码效果很好,可以从 JavaScript 触发回发。但是,它不允许你从 JavaScript 传递一个变量参数。我对代码进行了一些小的修改,使其能够从 JavaScript 传递一个字符串变量到后台代码。

背景

基本上,正如 Scott Norberg 在他的原始文章中所指出的,https://codeproject.org.cn/Articles/42183/How-to-post-back-to-the-server-using-JavaScript-in,我们试图避免使用 __doPostback 从 javascript 在 .Net 中触发回发,而是使用文档化的 .Net 框架类 "PostBackOptions" 来触发回发。这个代码的扩展允许从 JavaScript 传递一个变量。

使用代码

这是我的修改(我的代码是用 VB)。第一步是编写一个小的 EventArg 类

Public Class JavaScriptPostbackEventArgs
    Inherits EventArgs

    Public args As String = ""

    Public Sub New(args As String)
        Me.args = args
    End Sub
End Class

接下来,更改回发事件的类型以使用这个新的类

Public Event Postback As EventHandler(Of JavaScriptPostbackEventArgs)

现在接下来的任务是让 JavaScript 传递一个字符串变量。这是通过更改 Render 方法来实现的

第一步是向选项添加一个参数

options.Argument = "arg"

接下来,也将其作为变量添加到 javascript 函数调用中

writer.Write([String].Format("{0} = function(arg) {1}", functionName__1, "{"))

GetPostBackEventReference 渲染时,arg 是一个字符串值,而不是一个变量。以下代码将移除 arg 上的单引号,并使用变量

writer.Write(Me.Page.ClientScript.GetPostBackEventReference(options).Replace("'arg'", "arg"))
这是完整的 Render 方法
Protected Overrides Sub Render(writer As HtmlTextWriter)
    MyBase.Render(writer)
    Dim options As New PostBackOptions(PostbackButton)
    options.PerformValidation = Me.CausesValidation
    options.ValidationGroup = Me.ValidationGroup
    options.Argument = "arg"

    Dim functionName__1 As [String] = If(JavaScriptNamespaces.Equals([String].Empty), FunctionName, [String].Concat(JavaScriptNamespaces, ".", FunctionName))
    Dim arg As String = "e"
    writer.Write("<script type='text/javascript'>")
    AddNamespaces(JavaScriptNamespaces, writer)
    writer.Write([String].Format("{0} = function(arg) {1}", functionName__1, "{"))
    writer.Write(Me.Page.ClientScript.GetPostBackEventReference(options).Replace("'arg'", "arg"))
    writer.Write("};")
    writer.Write("</script>")
    Me.Page.ClientScript.RegisterForEventValidation(options)
End Sub
现在最后,引发回发事件将从请求中获取 EventArgument
Private Sub PostbackButton_Click(sender As Object, e As EventArgs)
    RaiseEvent Postback(sender, New JavaScriptPostbackEventArgs(HttpContext.Current.Request("__EVENTARGUMENT")))
End Sub

所有修改都完成了。

使用示例

这是一个如何在客户端使用它的示例。将控件添加到页面标记

<uc:JavascriptPostBack runat="Server" ID="ucPostback" FunctionName="javaPostback" />

一个简单的 javascript 示例来调用该函数是:你可以在另一个函数中使用它。

<script>
javaPostback('test');
</script>

最后是处理该事件的后台代码

  

Private Sub ucJavascriptpostback_Postback(sender As Object, e As JavaScriptPostbackEventArgs) Handles ucNodeClickPostback.Postback    


End Sub

在上面的示例中,e.args 将具有值 'test'。

© . All rights reserved.