2016-04-20 27 views
2

Ich versuche, meine Anmeldung und Abmeldung über meine Webseite zu implementieren. Es gibt zwei Panels, die umschalten. Beim Laden meiner Seite wird das Logout-Panel unsichtbar gemacht, so dass der Benutzer nur den Login-Link sehen kann. Nach dem Login wird der Login-Bereich unsichtbar gemacht und der Logout-Bereich wird sichtbar, wo sich der Logout-Link zum Ausloggen befindet. aber die Abmeldeschaltfläche löst nicht einmal das Klickereignis aus. Das ist, was ich am Ende im Browser-Fenstern angezeigt, wenn ich versuche, die Logout-Link-Button This is what i see in the browser window at the bottom when i try to click the logout link button Dies ist mein aspx zu klicken Seite-Logout Linkbutton wird nicht ausgelöst Click Event

<div> 
<asp:Panel ID="LoginPanel" runat="server"> 
    <ul class="style1"> 
       <li>Username</li> 
       <li><asp:TextBox ID="LoginEmail" runat="server" Width="90%" placeholder="Email" class="form-control"></asp:TextBox></li> 

       <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="Email Required" ControlToValidate="LoginEmail" ForeColor="#CC0000" Font-Italic="True"></asp:RequiredFieldValidator> 

       <li>Password</li> 
       <li><asp:TextBox ID="LoginPassword" runat="server" Width="90%" placeholder="Password" class="form-control" TextMode="Password"></asp:TextBox></li> 

       <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="Password Required" ControlToValidate="LoginPassword" ForeColor="#CC0000" Font-Italic="True"></asp:RequiredFieldValidator> 

       <li><asp:Button ID="LoginButton" runat="server" Text="Login" class="btn btn-default" onclick="LoginButton_Click"/> 

       &nbsp;New User?<asp:HyperLink ID="new_user" runat="server" NavigateUrl="Registration.aspx">Register Here</asp:HyperLink></li> 
    </ul> 
</asp:Panel> 
<asp:Panel ID="LogoutPanel" runat="server"> 
       <asp:LinkButton ID="LogoutLink" runat="server" Text="Logout" 
        onclick="LogoutLink_Click" /> 
</asp:Panel> 
</div> 

Das ist mein cs code-

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 
using System.Data; 
using System.Configuration; 

public partial class UserMasterPage : System.Web.UI.MasterPage 
{ 
    ConnectionClass cl; 
    SqlDataReader dr; 
    string sql; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      LogoutPanel.Visible = false; 
      cl = new ConnectionClass(); 
     } 
    } 
    protected void LoginButton_Click(object sender, EventArgs e) 
    { 
     sql = "select Id, Email_, Password_, Block from MemberLogin where Email_='" + LoginEmail.Text + "'"; 
     cl = new ConnectionClass(); 
     cl.establishConnection(); 
     cl.createReaderCommand(sql); 
     dr = cl.executeReaderCommand(); 
     if (dr.HasRows) 
     { 
      if (LoginPassword.Text == dr["Password_"].ToString()) 
      { 
       if (dr["Block"].ToString() == "False") 
       { 
        Session["user"] = dr[0].ToString(); 
        LoginPanel.Visible = false; 
        LogoutPanel.Visible = true; 
        //Response.Write("login successful"); 
       } 
      } 
     } 
     cl.closeConnection(); 
    } 
    protected void LogoutLink_Click(object sender, EventArgs e) 
    { 
     Session.Abandon(); 
     Response.Redirect("AdminLogin.aspx"); 
    } 
} 

Dieses ist auf meiner Masterseite. Ich muss dieses Problem sehr bald lösen. Bitte helfen Sie mir dabei. Vielen Dank im Voraus.

Antwort

3

Der mit dem LinkButton verknüpfte Aufruf __DoPostBackWithOptions hängt mit dem Vorhandensein der Validatoren auf Ihrer Seite zusammen. Einstellen CausesValidation-false wäre es durch die „normalen“ ersetzen __doPostBack:

<asp:LinkButton ID="LogoutLink" runat="server" CausesValidation="false" ... /> 

Die Validierer in Ihrem Markup gezeigt in einem Panel mit Visible = false zu sein, sollten sie nicht aktiv sein. Aber da ich nichts anderes sehe, das das Postback verhindern könnte, würde das Ausschalten der Validierung für den LinkButton diese mögliche Ursache zumindest beseitigen.

Übrigens, wenn Sie viele Steuerelemente und Validatoren in Ihrem Formular haben, können Sie sie mit Validierungsgruppen gruppieren. Das würde jede Taste (oder andere Steuerelemente ein Postback verursacht) erlaubt nur die relevanten Validatoren auslösen:

<asp:TextBox ID="txt1a" runat="server" ValidationGroup="Group1" /> 
<asp:RequiredFieldValidator ID="rfv1a" runat="server" ControlToValidate="txt1a" ValidationGroup="Group1" Text="*" ForeColor="Red" /> 
<asp:TextBox ID="txt1b" runat="server" ValidationGroup="Group1" /> 
<asp:RequiredFieldValidator ID="rfv1b" runat="server" ControlToValidate="txt1b" ValidationGroup="Group1" Text="*" ForeColor="Red" /> 
<asp:Button ID="btn1" runat="server" Text="Button1" ValidationGroup="Group1" /> 
<br /> 
<asp:TextBox ID="txt2a" runat="server" ValidationGroup="Group2" /> 
<asp:RequiredFieldValidator ID="rfv2a" runat="server" ControlToValidate="txt2a" ValidationGroup="Group2" Text="*" ForeColor="Red" /> 
<asp:TextBox ID="txt2b" runat="server" ValidationGroup="Group2" /> 
<asp:RequiredFieldValidator ID="rfv2b" runat="server" ControlToValidate="txt2b" ValidationGroup="Group2" Text="*" ForeColor="Red" /> 
<asp:Button ID="btn2" runat="server" Text="Button2" ValidationGroup="Group2" /> 

In dem obigen Beispiel ein Klick auf btn1 würde eine Postbacks verursachen, selbst wenn txt2a leer ist, weil sie don‘ t gehören zur Group1 Validierungsgruppe.

+0

das hat funktioniert, aber jetzt klickt jeder Link auf meiner Seite nicht Klick-Taste. also was soll ich tun? fügen Sie jedem Steuerelement eine Ursachevalidierung hinzu? Es gibt so viele von ihnen! –

+0

Ein oder mehrere Validatoren müssen aktiv sein und das Postback verhindern. Um die "Schuldigen" zu finden, können Sie nach und nach "Enabled =" false "" auf den Validatoren im Markup setzen, bis das Postback funktioniert. Sie könnten dann entscheiden, in welchen Situationen jeder aktiviert oder deaktiviert werden soll (in Code-Behind), so dass Sie auf all Ihren Buttons nicht "CausesValidation =" false "" setzen müssen. Auf der anderen Seite ist dieses Attribut für Steuerelemente sinnvoll, die eindeutig keine Validierung auslösen sollten, wie das Abmelden von LinkButton. – ConnorsFan

+0

danke @ConnorsFan –

Verwandte Themen