Serverseitigen Event bei verlassen einer ASP-Textbox auslösen

Die Standard-Textbox von ASP.NET unterstützt leider nicht das Event „OnLeave“ oder „OnBlur“. Mit Hilfe des Javascript-Events „onblur“ kann ein solches Event ermöglicht werden. Damit man dies nicht für jede Textbox implementieren muss habe ich daraus ein Steuerelement gemacht und es als DLL-Datei angehangen. Ihr könnt es einfach über die Toolbox von Visual Studio benutzen (Anleitung).

Im folgenden der Code:

using System;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Rapidev.Web.Controls
{
    public class rdTextbox : TextBox, IPostBackEventHandler
    {
        #region control events

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

            if (!Page.ClientScript.IsClientScriptBlockRegistered("OnLeaveTextboxEvent"))
                Page.ClientScript.RegisterStartupScript(GetType(), "OnLeaveTextboxEvent", GetScript(), true);

            Attributes.Add("onblur", "OnBlurred('" + UniqueID + "','')");
        }

        #endregion

        #region OnLeave event

        public delegate void OnLeaveDelegate(object sender, EventArgs e);

        public event OnLeaveDelegate Leave;

        private void RaiseOnLeaveEvent()
        {
            if (Leave != null)
                Leave(this, EventArgs.Empty);
        }

        #endregion

        #region methods

        private string GetScript()
        {
            return "function OnBlurred(control, arg)\n{\n __doPostBack(control, arg);\n}";
        }

        #endregion

        #region Implementation of IPostBackEventHandler

        public void RaisePostBackEvent(string eventArgument)
        {
            RaiseOnLeaveEvent();
        }

        #endregion
    }
}

Download rdTextBox

ASP.NET – Standardziel für die Eingabetaste innerherhalb einer Textbox

Häufig werden z.B. Formulare innerhalb von Webanwendungen benötigt. Diese bestehen oft aus mehreren Textboxen und Buttons. Viele Benutzer verwenden zum Abschluss eines Formulars die Eingabetaste, allerdings ist es ohne weitere Konfiguration dem Browser überlassen welchen Button er als Ziel für das Abschicken des Forumulars verwendet. Um diesem Problem Herr zu werden und für verschiedene Textboxen verschiedene Ziele festzulegen verwende ich folgenden Code.

Javascript:

function doClick(buttonName, e) {
	//the purpose of this function is to allow the enter key to
	//point to the correct button to click.
	var key;
	if (window.event)
		key = window.event.keyCode;     //IE
	else
		key = e.which;     //firefox
	if (key == 13) {
		//Get the button the user wants to have clicked
		var btn = document.getElementById(buttonName);
		if (btn != null) { //If we find the button click it
			btn.click();
			btn.focus();
			event.keyCode = 0
		}
	}
}

HTML-Markup:

<asp:TextBox ID="txtFilter" runat="server"></asp:TextBox>
<asp:Button ID="cmdFiltern" runat="server" Text="Filtern" OnClick="cmdFiltern_Click" />

CodeBehind (C#):

protected void Page_Load(object sender, EventArgs e)
{
	if (!IsPostBack)
		this.txtFilter.Attributes.Add("onkeypress", "doClick('" + cmdFiltern.ClientID + "',event)");
}

ReportViewer – Bericht als PDF aufrufen

Innerhalb einer Anwendung wollte ich gerne einen Report direkt exportiert als PDF-Datei aufrufen. Ich habe lange im Internet gesucht und habe viele nützliche Beiträge gefunden, allerdings habe ich kein Beispiel für meine Problemstellung gefunden. Da ich etwas unter zeitdrunk stand, musste ich mir etwas „einfaches“ einfallen lassen.

Das Problem lag darin, dass der ReportViewer die Daten/den Bericht erst einmal laden muss, bevor man ihn exportieren kann. Also klicke ich mit Hilfe von Javascript auf einen Button, der nachdem die Seite geladen wurde betätigt wird und den Bericht exportiert. Ich kann mir gut vorstellen, dass es eine wesentlich hübschere und bessere Methode dafür gibt, diese konnte ich aber leider nicht auf die schnelle finden.

„ReportViewer – Bericht als PDF aufrufen“ weiterlesen

ASP.NET Button – Erst Javascript, dann C# Event

Es passiert leider ab und zu, dass man in einer Webanwendung Methoden hat, die etwas mehr Zeit zur Durchführung benötigen. Es gibt dann mehrere Möglichkeiten sicher zu stellen, dass der Benutzer den Prozess nicht unterbricht, bzw. auf die Fertigstellung der Methode wartet.

Um den Benutzer z.B. daran zu hindern ein weiteres mal auf einen Button zu klicken kann folgender Code-Snippet verwendet werden.

this.Button1.Attributes.Add("onclick", "javascript:" + this.Button1.ClientID +
".disabled=true;" + ClientScript.GetPostBackEventReference(this.Button1, string.Empty));

Nachdem die Javascriptfunktion ausgeführt wurde wird ein Postback von dem Button ausgeführt, als wenn er „ganz normal“ mit einem Server Side Event belegt wird.

Der Button im HTML-Markup sieht folgendermaßen aus:

<asp:Button ID="Button1" runat="server"
  Text="Button" OnClick="Button1_Click" />

Der Event, welcher vom Server ausgeführt wird sieht „ganz normal“ aus:

protected void Button1_Click(object sender, EventArgs e)
{
    // Insert Code here
}