Comment intercepter la touche entrée dans une textbox asp.net 2.0 ?

Cette question revient souvent, on veut que la touche entrée dans une textbox soumette la page au lieu de cliquer sur un bouton, merci a Jean-Pierre Riehl alias Djeepy pour ce controle qui rends bien des serivces :

 

    public class SubmitableTextBox : TextBox
{
private const string KEYDOWN2_SCRIPT =
@"<script type='text/javascript'>
<!--
function __cancelSubmitOnKeyDown() {
return false;
}
function __keydown(e, ctrl) {
if (parseInt(e.keyCode) == 13) {
__doPostBack(ctrl, '');
}
}
// -->
</script>"
;

public SubmitableTextBox()
{
base.EnableViewState = true;
}

public string ControlToSubmit
{
get
{
return (string)(ViewState["ControlToSubmit"]) ?? string.Empty;
}
set
{
ViewState["ControlToSubmit"] = value;
}
}

protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);

Control ctrl = null;
if (Parent != null)
{
ctrl = Parent.FindControl(ControlToSubmit);
}
else if (NamingContainer != null)
{
ctrl = NamingContainer.FindControl(ControlToSubmit);
}
else if (Page != null)
{
ctrl = Page.FindControl(ControlToSubmit);
}

if (ctrl != null)
{
//GetPostBackClientHyperlink force __doPostBack mechanism on the page
string postBackCall = Page.GetPostBackClientHyperlink(ctrl, string.Empty);
/*
* TODO
* use postBackCall in KEYDOWN_SCRIPT
*/
string id = ctrl.UniqueID;
if (string.IsNullOrEmpty(id))
{
id = ctrl.ID;
}
base.Attributes.Add("OnKeyDown", "__keydown(event, '" + id + "')");

if (!Page.IsClientScriptBlockRegistered("__KeyDown"))
{
Page.RegisterClientScriptBlock("__KeyDown", KEYDOWN1_SCRIPT);
}
}
}
}
Dans la propriété ControlToSubmit il suffit d'indiquer le nom du bouton avec lequel on veut simuler le click.

Aucun commentaire: