Mit ENTER einen SUBMIT-Button simulieren

Saber

Erfahrenes Mitglied
Hallo!

Ich habe auf einer Webseite eine Textbox (asp:textbox) sowie einen Button (asp:button). Wenn ich nun in die Textbox etwas reinschreibe und auf den Button klicke, dann kann ich im Code-Behind mit den Werten arbeiten. Schreibe ich dagegen etwas in die Textbox und drücke [Enter], dann wird zwar der Postback ausgelöst, aber die Werte sind nicht verfügbar im Code-Behind.

Hab schon rumgegoogelt, leider halfen die gefundenen Work-Arounds nichts. Wer könnte mir da helfen? DANKE! :)
 
Was genau meinst Du damit?


Hab schon was gefunden. Wenn ich eine unsichtbare Nicht-ASP-Textbox in den Form-Tag reinsetze, dann klappts. :)
 
Es ist schön, dass du eine Lösung gefunden hast.

Mich würde sehr interessieren, wie du das mit dem versteckten Feld gemacht hast.
Suche nun schon 3 Stunden nach einer Lösung meines 'Enter' Problems.
 
Na ja, ich hab das so gemacht wie ich es geschrieben habe:

In den Form-Tag eine unsichtbare Textbox (Hidden Field) reingesetzt. Dann hat ers bei mir genommen.
Code:
<form runat="server">
   <input type="hidden" name="dummy" />
</form>
Oder so ähnlich, schon eine Weile her ... :)
 
Das versteh ich jetzt aber nicht!

Du machst einfach so ein Feld rein und dann? Dann wird bei einem Enter in der ASP-Textbos das Submit ausgeführt?

Hättest Du zufällig das Beispiel parat? War auf x Seiten und hab alles ausprobiert, und es funktionierte alles nicht!
 
Original geschrieben von Leominora
Du machst einfach so ein Feld rein und dann? Dann wird bei einem Enter in der ASP-Textbos das Submit ausgeführt?

Ja, genau.

Na ja, also verstehen tu ich das auch ned wirklich, bin damals eher zufällig drübergestolpert über diese Lösung. Das Beispiel kann ich Dir ned liefern, weil ich die Sourcen nicht mehr habe und das schon ewig her ist. Aber ich denke schon, dass ich das so gemacht habe.

Es könnte damit zu tun haben, dass ein Hidden-Field ein HTML-Steuerelement ist und kein ASP.NET-Steuerelement. Die HTML-Steuerelemente werden von .NET nicht "umgestaltet" beim Rendering oder so ähnlich und reagieren evtl. anders.
 
Default Button

Moin Leute,

ihr könnt das ganze noch feiner machen mit Javascript.

Zuerst erstellt ihr eine Klasse namens CJsDefaultButton.

Code:
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace MyProjekt.Tools
{	
   public class CJsDefaultButton
  {
      private string 	m_jsRegister;
      private Button 	m_DButton;
      private TextBox	m_TxtSubmit;
      private Control m_UserControl;


     // CJsDefaultButton
 public CJsDefaultButton(string jsRegister,Button dButton,TextBox myTextBox, Control myControl)
 {
   m_jsRegister 	= jsRegister;
   m_DButton 	= dButton;
   m_TxtSubmit	= myTextBox;
   m_UserControl	= myControl;
}
		
//Öffentliche Eigenschaften der Textbox
public TextBox TextBoxSubmit
{
  set{m_TxtSubmit = value;}
   get{return m_TxtSubmit;}
}

//Öffentliche Eigenschaften des Buttons
public Button ButtonDefault
{
  set{m_DButton = value;}
  get{return m_DButton;}
}

//Den JavaScript Rendern
public void DefaultButton()
{
   string sJsReturn;
   // Write your JavaScript Code into a string.
  sJsReturn = "<script language=javascript>" + Environment.NewLine;
  sJsReturn +="function fnTrapKD(btn){" + Environment.NewLine;
  sJsReturn +=" if (event.keyCode == 13)" + Environment.NewLine;
  sJsReturn +=" { " + Environment.NewLine;
  sJsReturn +=" event.returnValue=false;" + Environment.NewLine;
  sJsReturn +=" event.cancel = true;" + Environment.NewLine;
  sJsReturn +=" btn.click();" + Environment.NewLine;
  sJsReturn +="  } " + Environment.NewLine;
  sJsReturn +=" } " + Environment.NewLine;
  sJsReturn +="<";
  sJsReturn +="/";
  sJsReturn +="script";
  sJsReturn +=">";
  // Add a JavaScript Event to your TextBox
  TextBoxSubmit.Attributes.Add("onkeydown", "fnTrapKD(document.all." +   ButtonDefault.ClientID + ")");
 RegisterJs(m_UserControl,sJsReturn);
}

//Bewirkt, dass das JavaScript am Anfang der Seite gerendert wird.
private void RegisterJs(Control myControl,string jsString)
{
  if(!myControl.Page.IsStartupScriptRegistered(m_jsRegister))
      myControl.Page.RegisterStartupScript(m_jsRegister,jsString);
}
		
}//Ende Klasse CJsDefaultButton
	
}//End Namespace MyProjekt

Diese Bibliothek kannst du nun überall in deinen CodeBehind Dateien vwerden.
Beispiel:
Code:
using MyProjekt.Tools;
namespace MyProjekt
{
   public abstract class CHalloPage : Page
   {
       protected TextBox	txtCom;
       protected Button      btnCom;

      //Hier wird jetzt der DefaultButton registriert. Danach wird mit Enter die Form Submittet
      private void Page_Load(Object sender,EventArgs e)
      {
         CJsDefaultButton myDefButton = new CJsDefaultButton ("ComIDButton",btnCom,txtCom,this);
        myDefButton.DefaultButton();
      }
   }//Ende Klasse
}//Ende Namespace
 

Neue Beiträge

Zurück