2010-09-08 5 views
0

J'ai activé la propriété AutoPostBack de l'une des zones de texte de mon formulaire qui, selon w3 schools, doit uniquement déclencher une publication lorsque j'appuie sur Entrée ou sur Tab.Conflit Autopostback et doPostBack

J'appelle également un __doPostBack() sur pageLoad, étant donné la réponse d'un utilisateur à une invite javascript. Quand je fais cela, le Request.Form['__EventTarget'] n'est pas ce que je l'ai mis dans l'appel à __doPostBack.

Le vrai problème pour moi est que si je définis l'attribut AutoPostBack de TextBox sur false, le problème avec l'appel pageload __doPostBack disparaît. Ce n'est pas le comportement que je m'attendais. Des idées sur ce qui cause le problème? Pourquoi l'AutoPostBack activé aurait-il une influence?

Voici une partie du code:

asp:TextBox runat="server" ID="userName" OnTextChanged="UpdateTable" AutoPostBack="true" 
script type="text/javascript" 
     //![CDATA[ 
     var theForm = document.forms['form1']; 
     if (!theForm) { 
      theForm = document.form1; 
     } 
     function __doPostBack(eventTarget, eventArgument) { 
      if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
       theForm.__EVENTTARGET.value = eventTarget; 
       theForm.__EVENTARGUMENT.value = eventArgument; 
       theForm.submit(); 
      } 
     } 
     //]] 
/script 
input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" 
input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" 
input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" 
function jsPrompt(name) { 
    var ans = confirm('really follow ' + name + '?'); 
    if (ans) { 
    __doPostBack('follow', name); 
    } 
}

Puis, dans la page codebehind:

if (Request.Form["__EventTarget"] == "follow") 
    followPerson(Request.Form["__EventArgument"]);     

Mais, je continue à me que Request.Form["__EventTarget"] est ",", et je Ve est passé par le javascript dans le débogueur. Juste avant form.submit(), les arguments ne sont pas ","

+0

Terminé en corrigeant ceci en n'ajoutant pas le code __doPostBack manuellement. Aussi, avant cette correction, j'étais capable d'utiliser l'appel __doPostBack pour demander un PostBack, mais j'ai utilisé des champs cachés à la place pour soumettre des valeurs cibles et des arguments. – user420667

Répondre

1

OK ... par où commencer. Qu'est-ce que vous essayez exactement d'accomplir ici? Je ne peux penser à aucune raison légitime pour examiner Request.Form ["__ EventTarget"] dans ASP.NET. La seule fois que j'ai vu cela, c'est quand un programmeur ASP ou PHP old school apprend ASP.NET et n'a pas bien saisi le modèle axé sur les événements qui sous-tend ASP.NET.

En outre, que voulez-vous dire quand vous dites que vous appelez __doPostBack()? Vous ne devriez pas avoir besoin de le faire manuellement non plus. Si vous voulez vraiment créer une publication en javascript où cela ne se produit normalement pas, vous devez utiliser ClientScriptManager.GetPostBackEventReference(). Donc, utilisez cette méthode et passez votre TextBox pour obtenir le bon code de postback. Ensuite, vous pouvez l'exécuter n'importe où dans votre script côté client.

Espérons que cela aide. Si j'ai mal compris le scénario s'il vous plaît ajouter un commentaire et je vais essayer à nouveau. :)

+0

Dites que quelqu'un clique sur un bouton, et la logique complexe pour décider ce qui doit être fait est dans le C#. Il y avait une publication. Maintenant, dans certains cas, vous pouvez demander à l'utilisateur s'il est autorisé d'aller de l'avant et de faire ce qu'il a suggéré - le seul moyen de le faire est d'utiliser javascript, ce qui signifie que le javascript devrait vérifier une valeur cachée a été défini par le code C#. Maintenant, si l'utilisateur clique sur "ok, c'est ce que je voulais faire", alors il devrait publier et le faire. De plus, je ne vois aucune raison * pas * d'appeler __doPostBack, car il est disponible pour nous d'utiliser. – user420667

+0

Hmmmm ... pourquoi ne pas l'appeler manuellement ... Peut-être pour la raison pour laquelle vous avez posté? Quant à faire une confirmation avant la publication ...Je fais généralement quelque chose comme ça sur un bouton: OnClientClick = "return confirm ('Êtes-vous sûr de vouloir supprimer cet élément?');" Qui n'interfère pas ou ne modifie pas le comportement de publication par défaut, annule juste si l'utilisateur clique sur Annuler. – Bryan

+0

Je peux voir ce que vous dites, mais je ne veux pas vraiment savoir si je devrais ou non le faire (je crois que j'ai de bonnes raisons de le faire comme je le fais.) Je veux juste savoir pourquoi l'AutoPostBacking le vissera. Merci quand même pour vôtre aide. – user420667

0

Où est le code que vous utilisez? Assurez-vous que vous utilisez quelque chose comme:

var element = $get("<%= textbox1.ClientID %>"); 
__doPostBack(element.name, ''); // second param is command name/argument separated by $ 

HTH.

+0

En fait, la publication ne spécifie pas de contrôle. Je viens de définir les objets cibles et les arguments d'événements à des choses que je peux utiliser (ou que j'aurais pu utiliser) dans la page codebehind. – user420667