Erik Funkenbusch
Erik Funkenbusch

Reputation: 93424

Postback without a control context

I have a situation where I want to use several server side controls, which have clients side state. I want to check the state when events occur (like various clicks), and when the state is where i want it, I want to postback to the server and do some processing.

In particular, I need to make sure that at least 3 different controls have selections before I want to do a postback. Since there is no specific control that will initiate the postback, I just want to capture the selection events on the client side, then call __doPostBack() (or something similar) to initiate the processing. So i have disabled all server side events, turned off autopostback, and have wired up some javascript to handle this.

I've got all the client side code written and working, however I cannot seem to get the server-side to recognize the postback. I'm overriding RaisePostBackEvent, and checking the eventArgument for my custom argument. This doesn't work, as RaisePostBackEvent is never called.

This method has worked when I had autopostback enabled (for example, the Telerik Radgrid OnSelectChanged server side event).

Any suggestions on the best way to handle this?

Update:

When asked for sample code, it's exactly as I say above. Not rocket science.

Javascript:

function CheckState(source, eventArgs) {
    // logic to test state of controls
    __doPostBack("", "DoMyWork:");
}

Then in code behind I have:

protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
{
    if (eventArgument.IndexOf("DoMyWork") != -1)
    {
        // do my server side work.
    }
}

RESOLUTION:

Because this is somewhat confusing.. I'll just say what my solution was.

I used one of the controls involved in the postback and used it's UniqueID for the control parameter, then my method as the event.

Upvotes: 0

Views: 2793

Answers (1)

Ali Tarhini
Ali Tarhini

Reputation: 5358

if you call the __doPostBack() without parameters, asp.net cannot figure out which control fired the event and thus it cannot determine which event to fire. you need to add the name of the control as a parameter to __doPostBack() and an argument which could be null if you dont need one

__doPostBack('textbox1','')  //no arguments

__doPostBack('textbox1','12')

you can read the argument you passed in from code behind like this:

Dim arg As String = Request("__EVENTARGUMENT") 

Upvotes: 5

Related Questions