ASP.NET 1. 1 – DefaultButton definieren
In ASP.NET 2.0 gibt es die Methode HtmlForm.DefaultButton, mit der man den DefaultButton eines Formularelements festlegen kann. Sehr nützlich wenn man ein Formular mit mehreren Buttons erstellt hat und der Benutzer durch drücken der ENTER-Taste auf einem Input-Feld eine Aktion auslösen soll wie z.B. verschiedene Suchoptionen. Leider bietet ASP.NET 1.1 keine Funktion dieser Art.
Bei kamp-hansen.dk bin ich auf einen Lösungsansatz gestoßen, der zwar leider in VB und nur für den IE gebaut wurde, aber im Grunde ist der Lösungsweg nicht schlecht. Der “C#-Way” sollte dann in etwas so aussehen:
System.Web.UI.WebControls.TextBox objTextControl,
System.Web.UI.WebControls.Button objDefaultButton){
System.Text.StringBuilder sScript = new System.Text.StringBuilder();
sScript.Append("<script language=\"javascript\">");
sScript.Append("function GetKeyCodeIE(btn){");
sScript.Append(" if (event.keyCode == 13)");
sScript.Append(" { ");
sScript.Append(" event.returnValue=false;");
sScript.Append(" event.cancel = true;");
sScript.Append(" btn.click();");
sScript.Append(" } " );
sScript.Append(" } ");
sScript.Append(" function GetKeyCodeRest (Ereignis) { ");
sScript.Append(" if (!Ereignis) ");
sScript.Append(" Ereignis = window.event; ");
sScript.Append(" if (Ereignis.which) { ");
sScript.Append(" Tastencode = Ereignis.which; ");
sScript.Append(" } else if (Ereignis.keyCode) { ");
sScript.Append(" Tastencode = Ereignis.keyCode; ");
sScript.Append(" } ");
sScript.Append(" if (Tastencode == 13)");
sScript.Append(" document.getElementById(‘" + objDefaultButton.ClientID + "’).click();");
sScript.Append("} ");
sScript.Append(" var IE = document.all ? true : false;");
sScript.Append(" if (!IE){");
sScript.Append(" document.onkeydown = GetKeyCodeRest;");
sScript.Append("}");
sScript.Append("</script>");
objTextControl.Attributes.Add("onkeydown",
"GetKeyCodeIE( document.all." + objDefaultButton.ClientID + ")");
Page.RegisterStartupScript("ForceDefaultToScript", sScript.ToString());
}
Der Aufruf erfolgt dann mittels
DefaultButton(Page,txtSearch,btnSearch)
Ok, ganz glücklich bin ich mit dieser Lösung auch nicht – einige werden mir da sicherlich zustimmen – , aber “auf die Schnelle” ein durchaus akzeptabler Ansatz.
Noch keine Kommentare vorhanden.