web-dev-qa-db-fra.com

__doPostBack n'est pas défini

J'obtiens cette erreur lorsque j'essaie d'appeler un __doPostBack sur l'une de mes pages. Chaque page du projet utilise la fonction __doPostBack, mais dans cette page en particulier, j'obtiens une erreur Javascript.

je cherchais sur Internet et la seule chose que j'ai lue, c'est que cette erreur se produit lorsque j'ai un tag non fermé, mais je consulte le site et son contenu est correct.

Erreur: __doPostBack n'est pas défini Fichier source: htt: // localhost: 99/ProjectName/Disable.aspx Ligne: 1

26
jmpena

__doPostBack() devrait être automatiquement inclus par tout WebControl ASP.NET susceptible de provoquer une publication. On dirait que vous l'appelez manuellement dans certains scripts Javascript que vous avez écrits. Si tel est le cas, vous devrez inclure un WebControl pour vous assurer que cette fonction est insérée dans la page.

10
James Curran

L'erreur d'exécution côté/côté client __doPostBack est indéfinie m'a harcelé pendant quelques heures. Il y avait beaucoup d'aide trompeuse/incorrecte sur le net. J'ai inséré la ligne de code suivante dans l'événement Page_Load du fichier default.aspx.cs et tout a bien fonctionné, sur mon système et en production avec GoDaddy.

ClientScript.GetPostBackEventReference(this, string.Empty);
35
Don Tato

Si la page ne comporte pas de contrôle entraînant une publication, __doPostBack () ne sera pas généré en tant que définition de fonction. Une façon de remplacer cela consiste à inclure cette ligne dans votre Page_PreRender ():

this.Page.ClientScript.GetPostBackEventReference(<a control>, string.Empty);

Cette fonction renvoie une chaîne appelant __doPostBack (); mais force également la page à sortir la définition de la fonction __doPostBack ().

20
SAGExSDX

Voici pourquoi cela m’arrivait: j’ai accidentellement oublié que les balises de script doivent toujours avoir des balises de fermeture:

<script src="/Scripts/appLogic/Regions.js" />

J'ai corrigé le tag script:

<script src="/Scripts/appLogic/Regions.js" type="text/javascript" ></script>

et la santé mentale est revenue.

16
Paul Keister

Ajoutez simplement ce code à votre .aspx

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
12
Jose Luis

__doPostBack Works les gars

Écrivez ce code dans le chargement de page

ClientScript.GetPostBackEventReference (this, "");

8
Raghubir Singh

Essayez d'appeler la méthode RegisterRequiresPostBack . Le runtime ASP.NET doit inclure le code __doPostBack.

4
Atanas Korchev

En gros, il manque 2 éléments cachés html "eventtarget" Et "eventargument", ainsi qu'une fonction manquante "__doPostBack".

Ceux-ci sont absents du DOM.

J'ai essayé tous les correctifs énumérés pour cela et aucun n'a fonctionné. Cependant, en utilisant une combinaison de jquery et javascript, il existe une solution discrète. Ajoutez ceci à votre javascript sur le document prêt et vous partez pour la course (C'est une alternative bien plus rapide que d'installer le framework .net 4.5 sur votre serveur, bien que si vous pouvez installer la version 4.5 c'est la voie à suivre):

if ($('#__EVENTTARGET').length <= 0 && $('#__EVENTARGUMENT').length <= 0) {
  $('#YOUR_ASPNET_FORMID').prepend('<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /><input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />');
}

if (typeof __doPostBack == 'undefined') {
  __doPostBack = function (eventTarget, eventArgument) { object
    var theForm = document.forms['YOUR_ASPNET_FORMID'];
    if (!theForm) {
      theForm = document.YOUR_ASPNET_FORMID;
    }
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
      theForm.__EVENTTARGET.value = eventTarget;
      theForm.__EVENTARGUMENT.value = eventArgument;
      theForm.submit();
    }
  };
}

Je comprends que certaines des dites installations 4.5 corrigent cela. Je recommanderais certainement cela. Toutefois, si vous travaillez comme moi sur un site destiné au grand public avec un système cms cuit dans .net 4, il s’agit peut-être d’une solution plus simple, au lieu d’introduire de nouveaux bogues créés par la mise à jour de votre plate-forme.

2
user3283145

J'ai eu ce problème lorsque j'ai écrit mon propre code de page et j'ai oublié de mettre runat="server" sur l'élément de formulaire.

2
rg89

Solution à mon problème: IIS ASP.NET Webforms génère des pages Web en fonction de la chaîne de l'agent utilisateur

Mon IIS n'avait pas de définition pour le navigateur IE11; il utilisait donc un profil de navigateur très simple qui ne prend même pas en charge JavaScript. 

  • solution à court terme: exécuter le navigateur en mode de compatibilité. 
  • solution à moyen terme: déploiement de .Net Framework 4.5.1 contenant les définitions de profil de navigateur IE11.

Une alternative: set IE11 Browser definiton file

2
Martin Sentker

Je sais que ce fil de discussion est actif depuis un certain temps, mais je vais ajouter un autre détail pour ceux qui se présenteront à l'avenir.

La classe ClientScriptManager dispose de deux méthodes permettant de mieux gérer les publications en JavaScript. En particulier, la routine GetPostBackClientHyperlink . Il relance une chaîne que vous pouvez ensuite simplement affecter à l'événement côté client de l'élément onclick. Chaque fois que vous utilisez cette méthode, la routine __doPostBack et tous les champs de formulaire masqués nécessaires sont générés automatiquement. De plus, vous n'avez pas à écrire le JavaScript vous-même. Par exemple, j'ai ceci dans le Page_Load:

lnkDeactivate.Attributes("onclick") = ClientScript.GetPostbackClientHyperlink(lnkDeactivate, "deactivate")

Dans ce cas, ClientScript est l'instance d'objet ClientScriptManager automatiquement mise à disposition par la page ... Je ne l'instancie pas. Sur le post-back, j'utilise ce code pour détecter l'événement:

If Not String.IsNullOrEmpty(Request("__EVENTARGUMENT")) AndAlso Request("__EVENTARGUMENT") = "deactivate") Then
  '-- do somthing
End If

Je suis sûr qu'il existe des moyens plus efficaces/plus propres pour résoudre ce problème, mais j'espère que vous comprendrez l'idée derrière tout cela.

1
Justin
 this.Page.ClientScript.GetPostBackEventReference(<a control>, string.Empty); 

Cette astuce a fonctionné pour moi. J'aurais quand même aimé savoir pourquoi il ne rendait pas ...

Je vous remercie!

1
Troy

J'ai eu ce problème juste aujourd'hui, mais aucune des solutions que j'ai trouvées n'a fonctionné, y compris malheureusement la vôtre. Donc si quelqu'un lit ceci et que cela ne marche pas pour eux, essayez ceci 

http://you.arenot.me/2010/11/03/asp-net-__dopostback-is-not-defined/

Merci de m'avoir aidé dans le processus de résolution des problèmes!

0
Colin Wiseman

j'ai eu cette erreur et je l'ai résolue en insérant:

<form runat="server" style="display: none"></form>
0
Keivan Sabil...

Pour moi, "__doPostBack" ne fonctionnait pas dans toutes les pages car j'avais compilé mon projet avec La version la plus récente de Visual stdio, puis j'avais double-cliqué sur les propriétés de l'explorateur de solution et modifié le "Cadre cible" de .NET framework 4.0 en .Net framework 3.0 et après ce projet de reconstruction et cela a fonctionné. 

0
Alireza

Ancienne question mais réponse récente: si vous avez une ScriptManager, vérifiez si EnablePartialRendering est activé. Si oui, désactivez-le, je ne sais pas pourquoi c'est un problème là-bas ...

0
gobes

J'obtenais ceci parce que mon script était à l'intérieur d'un Iframe qui était "disposé" (c'était une "fenêtre" de Telerik qui était fermée). Le code définissant _dopostback () dans mon iframe avait disparu, mais le code appelant _dopostback () dans mon iframe traînait toujours. Aimez ce JavaScript!

0
Josh Mouch
lnkDeactivate.Attributes("onclick") = ClientScript.GetPostbackClientHyperlink(lnkDeactivate, "deactivate")
0
Atul Pawar

Envelopper mes contrôles côté serveur dans un élément form avec l'attribut runat="server" a fonctionné pour moi. Selon l'environnement asp, il ne devrait y avoir qu'un seul élément form avec l'attribut runat="server", sinon un problème grave pourrait se produire.

<form runat="server" id="form1">
   <!-- Server side controls go here -->
</form>
0
Jamshaid Kamran

Un autre ajout à ce fil vintage ....

J'ai eu ces symptômes lors du développement d'un site utilisant JQuery Mobile. Il est apparu que le lien que j'ai suivi avec la page concernée n'avait pas l'attribut rel="external" défini. 

Cela signifiait que JQuery chargeait le contenu de la nouvelle page via AJAX et les "injectait" dans la page en cours, au lieu de recharger tout le contenu. Le code de publication requis par javascript n'existait donc pas jusqu'à l'actualisation complète de la page.

0
Ted

j'ai utilisé cette méthode dans mon script qui incluait sous forme asp.net:

main form id sample:
<script src="myscript" />

<form id="frmPost" runat="server">
</form>

// myscript.js in Java script function
mypostboack: function () {
$('#frmPost').context.forms[0].submit()
}
0
user5292083

J'ai eu ce problème et parfois c'est juste une stupidité. Je l'ai écrit comme __doPostback avec un 'b' minuscule, où il aurait dû être __doPostBack avec un 'B' majuscule.

0
Mark Ibanez

Je recevais cela lorsque je cliquais sur un LinkButton. Résolu cela en ajoutant OnClick="LinkButton2_Click" à la balise.

0
WhatsInAName