Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

How to post back to the server using JavaScript in ASP.NET

0.00/5 (No votes)
29 May 2012 1  
This is an alternative for How to post back to the server using JavaScript in ASP.NET

Introduction

The code in the original article works great and causes postback from JavaScript. However, it doesn't let you pass a variable argument back from JavaScript. I made some slight modifications to the code to allow it to pass a single string variable from JavaScript to codebehind.

Background

Basically, as Scott Norberg noted in his original article, http://www.codeproject.com/Articles/42183/How-to-post-back-to-the-server-using-JavaScript-in, were trying to avoid using __doPostback to cause a postback from javascript in .Net, and instead use documented .Net framework class "PostBackOptions" to cause the postback. This extension to his code allows for passing a variable from JavaScript also.

Using the code

Here are my changes (my code is in VB). First step is to write a small EventArg class:

Public Class JavaScriptPostbackEventArgs
    Inherits EventArgs

    Public args As String = ""

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

Next, change the postback event's type to use this new class:

Public Event Postback As EventHandler(Of JavaScriptPostbackEventArgs)

Now the next task is to get the JavaScript to pass a single string variable. This is done by changing the Render method:

The first step is to add an argument to the option:

options.Argument = "arg"

Next, also add it as a variable in the javascript function call:

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

When GetPostBackEventReference renders this, it renders arg is a string value, not a variable. The following will remove the single quotes off of arg and use the variable:

writer.Write(Me.Page.ClientScript.GetPostBackEventReference(options).Replace("'arg'", "arg"))
Here is the full Render method:
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
Now finally the raise postback event will get the EventArgument from the request:
Private Sub PostbackButton_Click(sender As Object, e As EventArgs)
    RaiseEvent Postback(sender, New JavaScriptPostbackEventArgs(HttpContext.Current.Request("__EVENTARGUMENT")))
End Sub

That's all the changes.

Example of how to use

Here is an example on how to use it from the client side. Add the control the page markup:

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

A simple javascript example to call the function is: You can use this inside another function.

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

And finally the code behind that handles the event:

  

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


End Sub

In the above example, e.args will have the value 'test'.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here