DevTrain .NET Developers Home. Das Community Portal für ASP.NET, Visual Basic, C#
 
  Login Status: Hallo   Anmelden  Suche:  
Navigationslinks überspringen
Startseite
Artikel
Blogs
Foren
ClubClub erweitern

 
Ihre Optionen
Save
Mail
Print
Rate
 
Advertising
  VSone vom 24.-25. Februar 2010 im ehem. IMAX München

 
Navigationslinks überspringen
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.


 


Diskutieren Sie in den Foren

Business Intelligence Camp – Ihr schnellster Weg zu SSIS, SSAS und SSRS!