DevTrain

Autor: Hannes Preishuber

Hilfe das Menü lebt! Events in UserControls

In einem frühreren Artikel wurde beschrieben wie mit ASCX Seiten = Usercontrols, sehr einfach Menüs implementiert werden können. Zur Navigation wurden Hyperlinks verwendet.
Wie sieht es nun aus, wenn dieses Menü aktive Elemente wie Buttons enthält. Diese feuern Events und diese müssen wiederum behandelt werden.
Das Problem besteht nun darin, wo dieses Event zu behandeln ist?
Die einfachsten Möglichkeit ist, den Code in die ASCX Seite zu legen.
Natürlich würde das ganze auch über Codebehind funktionieren.

Unbedingt nötig ist ein Scriptblock in dem die Funktionen liegen. Man kann Code immer ausführen lassen indem man ihn zwischen <%%> Begrenzer packt. Da hier aber schon ein Codeblock vorhanden ist, legen wir den Code dort hinein und hier wiederum in das Page_Load Event.
Mein Beispiel dient einer Support Anwendung, mit der die Zeitdauer eines Supportcalls gemessen werden soll. Dazu haben ich einfach einen Button in das Menü integriert. Wenn nun ein neuer Call eröffnet wird, wird der Start Button gedrückt. Dann folgen viele Aktivitäten des Support Mitarbeiters. Die Info wird in eine Session Variable gelegt und der Button ändert seine Beschriftung in Stopzeit.
Der Eventname des Buttons wird über das Attribut onClick vergeben. Das Event des Buttons "StartClick" führt dann noch einen Redirect auf die StopSeite aus.

Sie müssen jetzt nur mehr beachten, das Sie das Menü User Control innerhalb des FORM Elements auf der ASPX Seite platzieren.

<script language="vb" runat="server">
private sub Startclick(ByVal sender As System.Object, ByVal e As System.EventArgs)
 if cmdTime.text="Startzeit" then
  session("startzeit")=date.Now()
 
  response.redirect("callflow.aspx") 
 else
  response.redirect("stopp.aspx")  
 end if
 
end sub
Sub Page_Load(Src As Object, E As EventArgs)
 Dim myCook As HttpCookie = Request.Cookies("agent")
 If not isnothing(myCook) Then
  user1.Text = myCook.value
 End If
 if isnothing(session("startzeit")) then
  cmdtime.text="Startzeit"
 else
   cmdtime.text="Stopzeit"
 end if
 
end sub
</script>
<asp:Panel id="Panel1" runat="server" backcolor="SkyBlue" forecolor="Yellow" width="100%" height="19">
 <asp:HyperLink id="menutop1" runat="server" NavigateUrl="index.aspx">
  Start</asp:HyperLink>&nbsp;
 <asp:HyperLink id="menutop2" runat="server" NavigateUrl="CallFlow.aspx">
  Support suchen</asp:HyperLink>&nbsp;
 <asp:HyperLink id="menutop3" runat="server" NavigateUrl="Customer.aspx">
  Kunden</asp:HyperLink>&nbsp;
 <asp:HyperLink id="Hyperlink1" runat="server" NavigateUrl="KBSuche.aspx">
  KB Suche</asp:HyperLink>&nbsp;
 <asp:HyperLink id="menutop4" runat="server" NavigateUrl="TeamEdit.aspx">
  Team</asp:HyperLink>&nbsp;
 <asp:HyperLink id="menutop5" runat="server" NavigateUrl="Statistik.aspx">
  Statistik</asp:HyperLink>&nbsp;
 <asp:HyperLink id="menutop6" runat="server" NavigateUrl="login.aspx">
  Login:</asp:HyperLink>
 <asp:label id="user1" runat="Server">
  no User</asp:label><FONT color="gray">V. 0.9B2</FONT>
 <asp:Button onclick="StartClick" id="cmdTime" runat="server" Width="68px" Height="19px" Font-Size="XX-Small">
 </asp:Button>
</asp:Panel>

Vielleicht drängt sich Ihnen jetzt die Frage auf, ob man nicht gleich ein eigenes Formular für in der ASCX Seite verwenden könnten. Das geht nicht. Auf einer ASPX Seite ist nur ein Formular zulässig. Da das Usercontrol quasi ein include ersetzt hätten Sie so zwei FORMs in einer Seite.

Dieser Artikel bezieht sich auf die Beta 2 des .NET Frameworks.


 


Erfasst am: 10.01.2002 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=683
© Copyright 2003 ppedv AG - http://www.ppedv.de