2016-04-20 9 views
2

自分のウェブページからログインとログアウトを実装しようとしています。トグルする2つのパネルがあります。私のページが読み込まれると、ログアウトパネルが見えなくなり、ユーザーはログインリンクしか見ることができなくなります。ログイン後、ログインパネルが非表示になり、ログアウトパネルが表示され、ログアウト用のリンクがログアウトする場所に表示されます。ログアウトリンクボタンはクリックイベントを発生させません。これは私がログアウトリンクボタンをクリックしようとすると、私は、これはこれは私のcsはログアウトリンクボタンがクリックイベントを発生していません

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"); 
    } 
} 

これをコード - ある

<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> 

PAGE-私のaspxあるThis is what i see in the browser window at the bottom when i try to click the logout link button 下部のブラウザウィンドウに表示されるものです私のマスターページにあります。私はすぐにこの問題を解決する必要があります。これで私を助けてください。事前に感謝します。

答えて

3

LinkBut​​tonに関連付けられた__DoPostBackWithOptionsコールは、ページ内のバリデーターの存在に関連しています。 falseからCausesValidationを設定すると、「通常の」__doPostBackで、それに代わる:

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

をマークアップに示したバリデータがVisible = falseとパネルにある、彼らはアクティブではありません。しかし、私はポストバックを防ぐことができる他のものは見ないので、LinkBut​​tonの検証をオフにすると、少なくともその原因が取り除かれます。

ところで、フォームに多数のコントロールとバリデータがある場合は、それらのグループを検証グループとグループ化することを検討することができます。彼らは「ドンので、txt2aが空の場合でも、btn1上のクリックがポストバックを引き起こす上記の例では

<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" /> 

:それは、各ボタン(またはポストバックの原因となる他のコントロールが)のみ関連のバリデータをトリガすることが可能になりますtはGroup1検証グループに属します。

+0

私のページのすべてのリンクは、クリックボタンを発射していません。だから何をすべきか?各コントロールにcausevalidationを追加しますか?それらの非常に多くがあります! –

+0

1つまたは複数のバリデータがアクティブで、ポストバックを防止する必要があります。 「有罪」のものを見つけるために、ポストバックが働くまで、マークアップのバリデータで徐々に 'Enabled =" false "を設定することができます。次に、すべてのボタンに対して 'CausesValidation =" false "を設定する必要がないように、それぞれの状況を有効または無効にする(コードビハインドで)かどうかを決めることができます。一方、その属性は、ログアウトLinkBut​​tonのように、検証を行うべきではないコントロールに対しては意味があります。 – ConnorsFan

+0

ありがとう@ConnorsFan –

関連する問題