7
votes

C # - Bouton ASP.NET Cliquez sur l'événement sans fonctionnement

J'ai une page ASP.NET (C #) avec des contrôles 3ème partie, des trucs Ajaxy et des contrôles de bouton ASP.NET normal.

Le bouton Cliquez sur les événements Ne pas tirer en cliquant. Fort > p>

double-cliquant sur le bouton en mode de conception dans VS 2008 commutes sur le code-derrière mais ne crée pas le gestionnaire d'événements. P>

Créer manuellement le gestionnaire d'événements ne vous aide pas. . p>

La page entière est trop grosse pour inclure ici, mais c'est le bit supérieur: p> xxx pré>

... et ma déclaration de bouton sur la page : P>

protected void LicenseCsvButton_Click(object sender, EventArgs e)
{
    // get data
    CompanyCompliance cc = new CompanyCompliance(Master.theCompany.ID);
    DataTable dt = cc.BusinessLicenses.Tables[0];

    // send to browser as download
    Tools.SendTableAsCsvToBrowser(Response, dt, "LicenseData");
}


3 commentaires

Y a-t-il des JS qui pourraient être interceptés et annuler la soumission de formulaire?


Certaines fonctions JS ont-elles déclaré sur la page, mais rien qui fonctionne lorsque la page est chargée - est-ce que je rechercherais?


Ceci est probablement dû à une sorte de contrôle Ajax sur votre page interférant avec le poste. Commencez à supprimer des contrôles jusqu'à ce que vous commenciez à exécuter des événements.


9 Réponses :


2
votes

Changer xxx

à xxx

question associée: CodeFile VS CodeBeHind


5 commentaires

Merci, mais cela ne compile pas, je reçois "ne pouvait pas charger le type" CompanyComppliancePage ". CompanyComppliance.aspx 1". Cela pourrait-il être parce que c'est dans VS 2008 (ASP.NET 3.5), puis en utilisant des classes partielles pour le code de la page?


Y a-t-il une classe de .designer.cs? Assurez-vous également que hériter = "CompanyCompagePage" correspond à votre nom de classe, vous devrez peut-être bien le qualifier ... Si tout le reste échoue, renommez votre page actuelle, puis ajoutez> Nouvel élément> Formulaire de contenu Web> Nom It 'CompanyCompterie' Bien sûr, vous pouvez simplement déposer dans un bouton et appeler le gestionnaire ONCLICK, une fois que cela fonctionne, copiez-le autant que le balisage / code que vous pouvez de l'existence.


Je pensais que designer.cs et codebehind = "" étaient principalement réservés aux anciennes versions de .net ... c'est ce que votre lien semble dire. Est-ce pas correct?


Utilisez-vous des formulaires Web ASP.NET (traditionnels) ou ASP.NET MVC? La dernière version du web d'ESS utilise toujours le code derrière la dernière fois que j'ai vérifié ... Je viens de trouver ce lien et j'ai pensé que cela pourrait être utile, mais je pense que c'est plus compliqué que ce que vous dites


Non, les formulaires Web ont utilisé de la page CodeBeHind depuis 2005. Merci quand même.



2
votes

La directive Hérités semble indiquer un type inexistant.

Jetez un coup d'oeil dans le code derrière le fichier de la page de la sociétéComppliance - ("sociétéComppliance.aspx.cs").

Vous devriez trouver l'espace de nom correct et quelque chose comme "Classe partielle publique XXX" où XXX est le nom de la classe qui doit correspondre à votre directive hériter. Peut-être que vous devez pleinement qualifier le nom de TJB déjà indiqué.


1 commentaires

Merci, mais a vérifié tout cela avant de poster la question, le type existe.



3
votes

expérimenté le même problème récemment - la cause a finalement été déterminé à être que le bouton était désactivé par une méthode de JufaScript OnBeForesUBMIT (conçue pour empêcher plusieurs soumissions) et malheureusement, les formulaires Web semblent vérifier l'état activé du bouton avant de pouvoir le CodeBeHind Event à déclencher.


0 commentaires

15
votes

Pendant le débogage, vérifiez la propriété CauséValidation de votre bouton. Pour une raison quelconque, une de mes pages avait un bouton défaut de «vrai». Quand je l'ai explicitement défini sur "False" tout a fonctionné.


0 commentaires

3
votes

J'ai eu ce problème juste maintenant et il a été causé par un autre contrôle ayant un autopostback = "true" qui soumettrait le formulaire avant que le bouton ait eu la chance de soumettre le formulaire pour déclencher l'événement de clic.


0 commentaires

9
votes

Je sais que cela devrait être résolu maintenant, mais juste pour partager - je viens d'avoir un problème similaire. Dans mon cas, le problème était que j'avais un requisFieldValidator dans une page, ce n'était pas visible car il faisait partie d'une popup. Ce validateur n'était censé être invoqué que lorsque vous cliquez sur le bouton "Enregistrer" associé, mais que je n'avais pas de validationgroup défini, il empêcherait la page de se soumettre pour n'importe quel bouton cliqué. Ajout d'un validationgroup sur le bouton droit résolu le problème.


0 commentaires

0
votes

Pour les demandeurs de réponses futurs: Si vous attribuez le gestionnaire de clics dans le code derrière, assurez-vous qu'il ne se trouve pas à l'intérieur d'un ISPOSTBACK == FALSE CHECK:

void Page_Load (object oSender, EventArgs oEventArgs)
{
   if (IsPostBack == false)
   {
       oButton += new EventHandler(oButton_Click); // does not work
   }
   oButton += new EventHandler(oButton_Click); // does work
}


0 commentaires

1
votes

J'ai eu ce problème j'ai changé la propriété Button "MoyensUBMitBehavior" = Faux. Maintenant, ça marche.


1 commentaires

À l'avenir, s'il vous plaît soyez plus détaillé dans vos réponses. Si vous fournissez une explication de ce que vous avez fait et pourquoi vous l'avez fait, de préférence avec du code et / ou de la documentation officielle, ce sera une bonne aide pour tout le monde.



2
votes

J'ai eu un problème similaire, et c'était vraiment difficile. J'ai récemment migré une application Web ASP.NET 2.0 VS 2005 à VS 2010 ASP.NET 4.0.

Il était difficile de configurer et de buggy comme prévu, mais le problème des boutons qui ne tire pas l'événement de clic se mettaient sur mes nerfs.

À la fin, il était aussi simple que de ne pas déclarer une action de soumission sur le site. J'ai changé: xxx

à xxx

boom. Problème résolu. J'espère que ça économise des jours de dépannage à quelqu'un. Malheureusement, je n'ai rien trouvé à ce sujet sur Internet par moi-même.


0 commentaires