Welcome to AspAdvice Sign in | Join | Help

manik.net

alles über c# / microsoft asp.net und viel, viel mehr
Ajax UpdatePanel.Refresh() auslösen per Javascript

Vor ein paar Tagen musste ich ein Ajax UpdatePanel.Refresh() per JavaScript auslösen, der Haken daran war es mussten auch noch Zusatzinformationen an den Server übertragen werden.
Die Lösung ist man ruft die JavaScript Funktion "__doPostBack" aus und übergibt als EventTarget die ClientID des UpdatePanel das zu refreshen gilt. Die Zusatzinformationen werden dem EventArgument Parameter der "__doPostBack" Funktion übergeben.
Wenn man keine Parameter bzw. Zusatzinfos an den Server übertragen möchte - also nur das Updatepanel refreshen ist das ganze ziemlich einfach.

Javascript Code:

function refreshUpdatePanel( updatePanelClientID )
{ 
    __doPostBack( updatePanelClientID, '' );
}

Dazu der passende C# Code:

button.OnClientClick = 
    "BLOCKED SCRIPTrefreshUpdatePanel( '" + updatePanel.ClientID + "' );"+
    "return false;";
Zu beachten ist hier lediglich das "return false" am ende des OnClientClick JavaScripts.
Dieses verhindert einen asp.net postback zurück an den server.

Wenn man Parameter/Zusatzinformationen an den Server zurück schicken möchte wird das ganze allerdings etwas komplizierter.

Javascript Code:

function refreshUpdatePanelParameterized( updatePanelClientID, eventArgumentName )
{
    // do javascript stuff to populate event arguments here, like get all checked checkboxes
    // or other clientside control content and send it back to the server
    // i'll use "nothing" as argument placeholder here
    var eventArguments = 'nothing';
    
    __doPostBack( updatePanelClientID, eventArgumentName + '_#_' + eventArguments);
}

C# Code:

protected void Page_Init(object sender, EventArgs e)
{
    if ( Request.Params["__EVENTTARGET"] == updatePanel.ClientID )
    {
        string[] eventsArgs = Request.Params["__EVENTARGUMENT"].Split( new string[]{"_#_"}, StringSplitOptions.RemoveEmptyEntries );
        string argumentName = eventsArgs[0];
        string argumentValue = eventsArgs[1];
 
        System.Diagnostics.Debug.WriteLine(string.Format("Recieved command {0} with values {1}.", argumentName, argumentValue ) );
    }             
}
 
protected void Page_Load(object sender, EventArgs e)
{
    button.OnClientClick = "BLOCKED SCRIPTrefreshUpdatePanelParameterized( '" + updatePanel.ClientID + "', 'arg1' ); return false;";
}

Wie das geschulte Auge erkennt werden hier zwei Parameter übertragen, ArgumentName und ArgumentValue. Der "refreshUpdatePanelParameterized" wird der ArgumentName (hier: "arg1") übergeben und die Funktion selbst ermittelt dann noch im JavaScript die ArgumentValue (hier: "nothing" ) und schickt die Informationen als Postback an den Server.
Der Serverseitige C# code "entschlüsselt" diese Informationen wieder in argumentName und argumentValue und verwertet diese anschließend.

Sponsor
Posted: Sunday, January 06, 2008 1:27 PM by manik
Filed under: , , , ,

Comments

manik said:

man sollte beachten dass "BLOCKED SCRIPT" mit "java.script:" ersetzt werden muss - aber bitte ohne den punkt ;) der host blockt anscheinend diese wörter im blog post.
# January 6, 2008 7:30 AM

rama krishna said:

i wannt ajax data base
# January 7, 2008 6:07 AM

manik said:

if you're more specific in what you need - i might be able to help you :)

# January 8, 2008 8:47 AM

Jürgen Gutsch said:

hehe, ich hätte gerne ein Ajax Auto *G* @Manik, danke für den Beitrag, den habe ich gerade gut brauchen können :-)
# April 18, 2008 2:57 AM

manik said:

hehe :)

freut mich wenn ich jemandem helfen konnte :)

# April 18, 2008 4:45 AM
Leave a Comment

(required) 

(required) 

(optional)

(required) 

Enter the code you see below

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS