Nach ein oder zwei Tage, an denen ich mir die Haare ausreißen konnte ... ich hoffe, das hilft anderen genauso frustriert wie ich:
Jeder, der diesen Beitrag gefunden hat, weiß, dass die intuitive Antwort hier die Standardschaltfläche des Formulars setzt zum nächsten butto n Ihres Assistenten, tut nichts. Der nächste logische Schritt besteht darin, das Problem zu umgehen, indem Sie im Namen des Benutzers auf die Schaltfläche klicken. Es sei angenommen, habe ich die folgenden Handler meine Textbox angebracht innerhalb der Code-Behind und dass myButtonId ist die ID der Schaltfläche I als Standard benötigen:
function textKeyDown(e) {
if (e.keyCode == 13) {
var myBtn = $get(myButtonId);
myBtn.click();
}
}
Sie die oben denken würde, würde gut funktionieren, aber wie es stellt sich heraus, das Erzwingen des Wizard-Buttons zum Erstellen eines extrem hinterhältigen Konflikts - der erste Button auf der Seite würde ebenfalls klicken, den ersten Button-Klick überschreiben, den ich per Script erzwingen musste und sehr seltsame Ergebnisse erzeugen. In meinem Fall ist die erste Schaltfläche auf meiner Masterseite eine Schaltfläche mit der Beschriftung Startseite. Wenn der Benutzer darauf klickt, kehrt die Website zur Startseite zurück. Bei meinen Versuchen, den Next-Button des Wizards zu drücken, würde ich sofort wieder auf meiner Homepage landen, für etwas, das überhaupt keinen Grund zu haben schien. Nach dem Anhängen an PageRequestManager.initializeRequest konnte ich sehen, dass ich zwei separate Postbacks hatte: 1 für meinen erzwungenen Wizard-Button und 1 für einen Button, der zu dieser Zeit noch nicht auf meinem Radar war - der Home Page-Button.
Also, kurz gesagt, wenn ich die Standardschaltfläche des Formulars (Page.Form.DefaultButton) aus dem Code hinter aktualisieren, dann dieses Skript aus dem Code dahinter und verweisen Sie es aus meinem Textfeld auch, alles funktioniert just fine:
public static void ExampleAssignDefaultButton(WizardStepBase activeWizardStep, TextBox myTextBox, IButtonControl myButton)
{
// create the format string for the script
string javaScript = @"function defaultButton(src, evt){{
if(evt.keyCode == 13){{
var btn = $get('{0}');
setTimeout(new function() {{ btn.click(); }}, 5);
}}
}}";
// format it ...
javaScript = String.Format(javaScript, ((WebControl)myButton).ClientID);
// register it...
ScriptManager.RegisterClientScriptBlock(activeWizardStep, activeWizardStep.GetType(), "defaultButton", javaScript, true);
// assign it to my textbox
myTextBox.Attributes.Add("onkeydown", "defaultButton(this, event);");
// also update the form's default button:
myTextBox.Page.Form.DefaultButton = ((WebControl)myButton).UniqueID;
}
Es ist erwähnenswert, dass ich OnPreRender ist das obige Verfahren aus dem aktiven Assistenten Schritt Ereignisse immer anrufen. Es ist auch erwähnenswert, dass ich nur ein Textfeld pro Schritt in meinem Assistenten hatte, musste ich dieses Verhalten nur einem Steuerelement zuweisen. Ich habe diesen fixen Bereich nicht versucht, um die Eingabetaste auf der ganzen Seite zu drücken, obwohl ich mir nicht vorstellen kann, dass sie sich in diesem Kontext zu unterschiedlich verhalten würde. Sie müssen die Eingabetaste für jedes Steuerelement in Ihrem Assistenten wahrscheinlich nicht abfangen, wenn Sie viele Eingaben pro Schritt haben.
So, da haben Sie es - nur 12 Stunden Fehlersuche, etwas zu tun, das ungefähr 10 Minuten hätte dauern sollen.
Glückliche Kodierung.
B
Ich habe dieses Problem. Ich versuche, basierend auf Ihrer Antwort zu lösen, aber es kann einfach nicht funktionieren. Das Javascript wird zwar hinzugefügt, aber die Seite reagiert immer noch auf die Startseite und nicht auf die nächste Schaltfläche ....? irgendwelche Ideen? –
Hallo @Mad Pierre - hast du mehrere Browser ausprobiert? Meine Antwort hier könnte etwas veraltet sein für Browser wie Chrome, die entschieden haben "click()" kann nicht aufgerufen werden und stattdessen müssen Sie den Mausklick simulieren, indem Sie DOM2-Ereignisse generieren ... – Brian
Noch nicht. Ich versuche zuerst mit IE (9). Hast du meinen anderen Kommentar oben gesehen: Das Skript funktioniert, wenn ich eine Warnung hinzufüge? –