web-dev-qa-db-fra.com

comment utiliser la fonction __doPostBack dans asp.net

j'essaie d'utiliser la fonction __doPostBack afin que je puisse forcer ma page à faire un post pack sur le chargement de la page, mais j'ai quelques difficultés à comprendre.

quand je regardais les exemples en ligne. Sur le bouton de clic, je veux faire le post en arrière, mais je ne sais pas comment compléter le code dans le code derrière.

Voici ce que j'ai jusqu'à présent:

<script type="text/javascript">
        function DoPostBack() {
            __doPostBack('btnNew', 'MyArgument');
        }
    </script>

Voici mon bouton

 <asp:Button ID="btnNew" runat="server" CausesValidation="False" CommandName="New" OnClick="DoPostBack()" Text="Create" />

Je ne semble pas comprendre à utiliser "MyArgument" dans le code ci-dessous. Qu'est-ce que je dois faire dans le code derrière pour qu'il soit posté sur le chargement de la page? merci d'avance pour l'aide.

5
moe

Scénario 1

Si vous souhaitez utiliser JavaScript function pour déclencher la publication, vous devez remplacer le OnClickpar OnClientClickname__. Modifiez la définition du bouton comme ceci (je suppose déjà qu'il est imbriqué dans un UpdatePanelname__):

<asp:Button ID="btnNew" 
    runat="server" 
    CausesValidation="False" 
    CommandName="New" 
    OnClientClick="DoPostBack();" 
    Text="Create" />

Dans le code situé derrière, dans la méthode Page_Load, lisez le Request["__EVENTTARGET"] et le Request["__EVENTARGUMENT"]:

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
    {
        if (Request["__EVENTTARGET"] == "btnNew" && 
            Request["__EVENTARGUMENT"] == "MyArgument")
        {
            //do something
        }
    }
}

Scénario 2

Si vous ne voulez pas forcément utiliser JavaScript , modifiez la définition du bouton comme suit:

<asp:Button ID="btnNew"
    runat="server"
    CausesValidation="False"
    CommandName="New"
    OnClick="DoPostback"
    CommandArgument="MyArgument"
    Text="Create" />

Ensuite, ajoutez la méthode suivante dans le code derrière:

protected void DoPostback(object sender, EventArgs e)
{
    var target = ((Button)(sender)).ClientID; //"btnNew"
    var argument = ((Button)(sender)).CommandArgument; //"MyArgument"
    if (target == "btnNew" &&
        argument == "MyArgument")
    {
        //do something
    }
}
4
Alex Filipovici

Les valeurs transmises à la fonction __doPostBack sous forme d'arguments seront envoyées au serveur sous forme de paramètres de requête nommés __EVENTTARGET et __EVENTARGUMENT. ASP.NET utilise ces valeurs pour déterminer quel contrôle a déclenché un événement et quels arguments doivent être transmis en tant qu'objet EventArgs. Mais vous pouvez y accéder directement en utilisant object HttpRequest:

string eventTarget = this.Request.Params.Get("__EVENTTARGET");
string eventArgument = this.Request.Params.Get("__EVENTARGUMENT");
2
Andrei

ASP.Net vous permet de créer un appel pour exécuter un PostBack à partir de javascript.

La méthode ClientScriptManager.GetPostBackEventReference crée le code que vous devez utiliser en javascript pour exécuter un PostBack à partir d'un contrôle particulier http://msdn.Microsoft.com/en-us/library/system.web.ui.clientscriptmanager.getpostbackevenue .aspx

Vous trouverez ci-dessous un exemple (en VB.Net). Dans le code-behind, je crée ma propre fonction javascript. Le code ASP.Net insérera du code javascript dans ma fonction pour exécuter le PostBack pour le contrôle "MyButton". Lorsque la page est construite, cette fonction javascript sera disponible. Lorsque le code javascript appelle cette fonction javascript, il effectue ensuite un postback, qui imite l'action qui se produit lorsque l'utilisateur clique sur le bouton "Mon bouton".

Dim csm As ClientScriptManager = Page.ClientScript
Dim sb As New StringBuilder
sb.AppendLine("function handleDoPostBack() {")
sb.AppendLine(csm.GetPostBackEventReference(MyButton, ""))
sb.AppendLine("}")
csm.RegisterClientScriptBlock(Me.Page.GetType, "js_code__create_functions", sb.ToString, True)

J'espère que c'est ce que vous cherchez.

UPDATE

Voici un exemple de la façon dont vous pourriez appeler la fonction javascript créée pour vous côté serveur.

<input type="button" value="Click Me" onclick="handleDoPostBack();" />

Je viens de créer un bouton HTML classique (au lieu d'utiliser un bouton ASP.Net), car je ne voulais pas confondre le concept d'un bouton avec PostBack. C'est simplement un bouton HTML qui ne fait rien d'autre que ce que vous programmez pour le faire. Depuis que j'ai ajouté l'appel de fonction javascript à onclick, lorsque vous appuyez sur le bouton, le postback est exécuté. Lorsque cette publication survient, elle agira comme si le bouton "MyButton" avait été cliqué; ce serait un bouton ASP.Net que vous avez quelque part sur la page. Étant donné que ce bouton est un bouton ASP.Net, il effectue déjà un PostBack. C'est pourquoi je pense qu'il y a une certaine confusion quant à la raison pour laquelle vous souhaitez déclencher un PostBack par programme.

Vous pouvez également appeler la fonction javascript directement dans le code, en tant que telle ...

<script>
handleDoPostBack();
</script>

Cela se produira dès que le code le rencontrera. Ou, si vous le mettez dans un événement onload, il sera appelé une fois le chargement de la page terminé. Mais comme je l'ai mentionné dans mon commentaire, vous devrez faire attention à cela, car vous risquez de vous retrouver avec une boucle inifinite.

Après avoir lu certains de vos commentaires dans les autres réponses, le problème que vous essayez de résoudre semble être lié aux panneaux AJAX que vous utilisez. Je ne les connais pas bien, alors je ne sais pas pourquoi cela ne fonctionne pas pour vous et je ne sais pas si le déclenchement programmatique de PostBack va résoudre votre problème.

Toutefois, si vous devez déclencher un postback par programme, vous pouvez utiliser ce code. Je l'utilise dans les cas où je ne souhaite pas qu'un bouton se trouve sur la page, mais que je souhaite qu'une action ait lieu. Quand quelque chose d'autre se passe sur ma page, je lance un code javascript qui agit comme si un bouton était cliqué - et je peux gérer ce bouton en cliquant sur le côté serveur. Dans ma page ASP.Net, j'inclus le bouton, mais j'utilise ensuite CSS pour empêcher l'utilisateur de voir le bouton. Donc, l'utilisateur ne voit pas le bouton, mais mon code javascript peut appeler ma fonction javacript qui imitera un clic de ce bouton.

1
Rick

code ci-dessous fonctionne pour moi de faire une publication en utilisant C #. Notez que je n'utilise pas le paramètre 'MyArgument' et le laisse vide

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "DoPostBack", "__doPostBack('dummybtnPivotGridupdate', '')", true);

<asp:Button ID="dummybtnPivotGridupdate" runat="server" Style="display: none;" ClientIDMode="Static" />

J'espère que cela t'aides!

1
Rama