2010-09-03 24 views
1

J'ai un problème dans IE. Si vous appuyez sur Entrée lorsque le dernier contrôle d'entrée est activé, le focus est envoyé au bouton "Suivant". Cela soumet le formulaire. Jusqu'ici tout va bien.soumettre le comportement du bouton dans IE

Le code dans mon WizardController de classe de base semble voir si le bouton de soumission suivant est nul, comme suit:

 protected string NextButton 
     { 
      get 
      { 
       return ControllerContext.HttpContext.Request.Params["NextButton"];Nex 
      } 
     } 

Cependant, en dépit de la forme soumission, cette propriété renvoie null à moins que l'utilisateur clique explicitement sur la bouton avec sa souris.

Ceci est manifestement faux, mais je ne sais pas pourquoi cela se produit.

RÉVISÉ POUR LE PROBLÈME PRÉCISER PRECISE:

Le problème se produit uniquement s'il n'y a qu'une commande d'entrée de texte dans le formulaire HTML qui obtient rendu au navigateur.

FIN EDIT

Andrew

Répondre

2

J'ai enfin trouvé une explication à mon problème:

Il semble être un bug dans IE, où s'il y a une seule entrée de texte sous la forme de rendu HTML, alors IE ne sera pas soumettre le formulaire correctement. La question est décrite (brièvement) à:

Form Submit via Enter Key when using IE

Dans le lien ci-dessus, aucune description est donnée à la raison pour laquelle le bogue se produit, ou depuis quelle version de IE, donc une solution globale est meilleure.

La solution proposée dans l'article est d'ajouter une entrée de texte caché css (avec conditionals pour IE):

<!--[if IE]> 
    <input type="text" style="display: none;" disabled="disabled" size="1" /> 
<![endif]--> 

Cela a fonctionné pour moi, donc question résolue.

Ce qui suit est inclus pour documenter la question comme je l'ai vécu:

Contrairement au problème décrit dans l'article, ma forme se soumirent. Toutefois, lorsque j'ai essayé de vérifier quel bouton avait été accédé en appuyant sur l'onglet ou la touche Entrée, aucun bouton de soumission n'était dans la collection HttpContext.Request.Params. Donc le comportement que j'ai vu était légèrement différent.

Ce que l'article ci-dessus a identifié est que ce comportement est seulement vu quand il y a seulement un contrôle d'entrée de texte. Une seule case à cocher, par exemple, ne provoque pas le problème.

J'espère que cela documente correctement le problème ... et que MS va un jour corriger le bug.

1

Un travail simple pourrait être autour d'utiliser un élément de forme cachée et dépendent que, plutôt que le bouton.

<input type='hidden' name='action' value='next' /> 

Si vous avez plusieurs boutons, vous pouvez toujours utiliser JavaScript pour modifier la valeur de l'élément d'action juste avant l'envoi.

+0

Vous ne savez pas comment votre réponse se rapporte à ma question? C'est-à-dire, comment cela empêcherait-il le formulaire de soumettre si l'utilisateur appuie sur entrer? Et est-ce un bug connu dans IE? Aussi, toute solution ne devrait pas impliquer l'utilisation de JavaScript: elle doit fonctionner avec ou sans. – awrigley

+0

En mettant dans le champ caché, vous n'avez pas besoin d'empêcher la soumission en appuyant sur Entrée. Le problème est que presser Entrée soumet le formulaire, mais sans les données du bouton 'suivant', non? Il suffit donc d'ajouter un autre élément de formulaire caché et de l'utiliser à la place de 'nextButton'. Comme pour le JavaScript, vous auriez seulement besoin de/want que si vous avez plus d'un bouton de soumission (par exemple "Suivant" et "Précédent"), mais pourquoi vous refuseriez d'utiliser JS je ne peux pas imaginer. –

+0

Le problème est seulement avec IE. Dans tous les autres navigateurs, cela fonctionne très bien. Mon environnement de travail d'assistant construit une notion des étapes actuelles, prochaines et précédentes en utilisant la réflexion plutôt que les attributs d'un contrôle d'entrée, donc la soumission de formulaire doit se faire avec un bouton Soumettre. Tout fonctionne (y compris les barres latérales générées automatiquement) à l'exception de celui-ci "bug". Je ne pense vraiment pas que votre suggestion fonctionnera étant donné le cadre que j'ai construit, mais merci pour la suggestion et je vais le garder dans les dossiers. – awrigley

Questions connexes