2009-07-25 12 views
1
zugegriffen wird

Ich habe diese Website, die eine MasterPage und einige Inhaltsseiten hat. Die MasterPage enthält ein Div, das ich öffne, wenn der Benutzer auf den Link "Anmelden" klickt, der sich ebenfalls auf der MasterPage befindet. Dieses Anmeldeformular hat zwei Textboxen, einen für den Benutzernamen und einen für das Passwort, und wenn der Benutzer das Formular abschickt, sollten sie authentifiziert werden und dort Benutzerinformationen in die Sitzung eingefügt werden. ALL der zu behandelnden Code befindet sich im MasterPage-Code dahinter.MasterPage Textfelder sind leer, wenn auf Code

Hier ist das Problem: Wenn das Click-Ereignis von MasterPage den Text aus den Textfeldern zur Verwendung in der Authentifizierungsmethode erfasst, sieht der Code den Text als leer.

Was fehlt mir?

Hier ist der Klick-Code-Taste und Form, die auf der Masterseite befindet:

Button:

bool IsUserAuthenticated = false; 
     string userName = txtUserName.Text; 
     string password = txtPassword.Text; 

     IsUserAuthenticated = masterDataManager.AuthenticateUser(userName, password); 

     if (IsUserAuthenticated) 
     { 
      Session.Add("UserName", userName); 
      lblCurrentUserName.Text = "You are logged in as: " + userName; 

      string script = "<script type=\"text/javascri\">$('#dialogBox').dialog('close');</script>"; 

      if (Page.ClientScript.IsStartupScriptRegistered("closeDialog")) 
      { 
       Page.RegisterStartupScript("closeDialog", script); 
      } 
     } 
     else 
     { 
      lblLoginError.Text = "Username/Password combination does not exist in the database. Please try again."; 
     } 

Und hier ist der Div:

<div id="dialogBox" title="Log In"> 
      <table align="center" style="margin-top: 5px; width: 100%" cellpadding="5" cellspacing="5"> 
       <tr> 
        <td colspan="2"> 
         <asp:Label ID="lblLoginError" runat="server" Text="" CssClass="errorText"></asp:Label> 
        </td> 
       </tr> 
       <tr> 
        <td class="dialogText"> 
         <asp:Label ID="lblUserName" runat="server" Text="User Name: " ForeColor="#c3c003"></asp:Label> 
        </td> 
        <td class="dialogInput"> 
         <asp:TextBox ID="txtUserName" runat="server" BackColor="Black" ForeColor="#c3c003" Width="210px"></asp:TextBox> 
        </td> 
       </tr> 
       <tr> 
        <td class="dialogText"> 
         <asp:Label ID="lblPassword" runat="server" Text="Password: " ForeColor="#c3c003"></asp:Label> 
        </td> 
        <td class="dialogInput"> 
         <asp:TextBox ID="txtPassword" runat="server" TextMode="Password" BackColor="Black" ForeColor="#c3c003" Width="210px"></asp:TextBox> 
        </td> 
       </tr> 
       <tr> 
        <td class="dialogInput" colspan="2"> 
      <asp:UpdatePanel runat="server" ID="testupdatepanel"> 
      <ContentTemplate> 
         <asp:ImageButton ID="btnLogin" runat="server" ImageUrl="~/images/loginout.png" ImageAlign="Right" style="padding-top: 15px;" onclick="btnLogin_Click" /> 
         <asp:ImageButton ID="btnCancel" runat="server" ImageUrl="~/images/cancelout.png" ImageAlign="Right" style="padding-top: 15px;" /> 
      </ContentTemplate> 
      </asp:UpdatePanel> 
        </td> 
       </tr> 
      </table> 
     </div> 

DIe txtUserName und TxtPassword Texteigenschaften sind leer, obwohl Text in der Box vorhanden ist.

Lassen Sie mich wissen, wenn Sie noch etwas brauchen.

+1

Können Sie einen Beispielcode posten? – Don

Antwort

2

Versuchen Sie, das Aktualisierungsfenster so zu verschieben, dass es die Textfelder enthält, die Sie zurücksenden möchten.

Wenn Sie ein Update-Panel verwenden, definieren Sie im Allgemeinen die Elemente, die Sie zurücksenden möchten.

0

Haben die Textfelder das Attribut runat = "server"?

EDIT: Funktioniert es, wenn Sie die Login-Schaltfläche außerhalb des Updatepanel setzen?

+0

Ja, tut es. In der Tat wird es ohne es nicht kompilieren. –

0

Es ist schwer, ohne Code zu erraten, aber hier sind ein paar sowieso:

  • prüfen, an welcher Stelle in der Seite Lebenszyklus sind versuchen Sie die Textbox Inhalt zuzugreifen.
  • Überprüfen Sie, ob die Textfelder nicht zurückgesetzt werden.
+0

Um die Antwort von TreeUK hinzuzufügen, können Sie den Inhalt der Textbox im Ereignis zum Laden der Seite zurücksetzen, ohne nach dem Postback zu suchen, aber auch hier ist es schwer zu sagen, ohne den Code zu sehen. – Steve

Verwandte Themen