2016-10-14 48 views
2

我嘗試恢復用戶輸入到文本框中的內容。當用戶輸入數據時,TextBox.Text爲空

我創建訪問器來公開我的文本框,因爲我之前遇到了可訪問性問題。

這裏是我的全aspx.cs的聯接:

public partial class ConnexionSaisieHeures : System.Web.UI.Page 
{ 
    /*Accesseurs*/ 

    public string NomUtilisateur 
    { 
     get 
     { 
      return txtNomUtilisateur.Text; 
     } 
     set 
     { 
      txtNomUtilisateur.Text = value; 
     } 
    } 

    public string MotDePasse 
    { 
     get 
     { 
      return txtMotDePasse.Text; 
     } 
     set 
     { 
      txtMotDePasse.Text = value; 
     } 
    } 

    /*Événements*/ 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     ErreurConnexion.Visible = false; 
     lblErreurConnexion.Text = ""; 
    } 

    protected void btnConnexion_Click(object sender, EventArgs e) 
    { 
     if (Authentifier(txtNomUtilisateur.Text, txtMotDePasse.Text)) 
     { 
      FormsAuthentication.RedirectFromLoginPage(txtNomUtilisateur.Text, false); 
     } 
     else 
     { 
      ErreurConnexion.Visible = true; 
      lblErreurConnexion.ForeColor = System.Drawing.Color.Red; 
      lblErreurConnexion.Text = "Erreur d'authentification : Le nom d'utilisateur ou le mot de passe est incorrect."; 
     } 
    } 

    /*Méthodes*/ 

    /// <summary> 
    /// Méthode permettant l'authentification des utilisateurs à l'application 
    /// </summary> 
    /// <param name="strNomUtilisateur">Nom de l'utilisateur saisi</param> 
    /// <param name="strMotDePasse">Mot de passe saisi</param> 
    /// <returns>Booléen vérifiant si l'authentification a été faite ou non</returns> 

    private bool Authentifier(string strNomUtilisateur, string strMotDePasse) 
    { 
     bool bOk = false; 
     // Cryptage du mot de passe 
     strMotDePasse = FormsAuthentication.HashPasswordForStoringInConfigFile(strMotDePasse, "MD5"); 
     // Création d'une connexion SGBD 
     SqlConnection oConnexion = new SqlConnection(Convert.ToString(ConfigurationManager.ConnectionStrings["SaisieHeuresConnectionString"])); 
     // Définition de la requête à exécuter 
     SqlCommand oCommand = new SqlCommand("SELECT * FROM Utilisateurs WHERE NomUtilisateur='" + strNomUtilisateur + "'", oConnexion); 
     try 
     { 
      // Ouverture de la connexion et exécution de la requête 
      oConnexion.Open(); 
      SqlDataReader drUtilisateur = oCommand.ExecuteReader(); 
      // Parcours de la liste des utilisateurs 
      while (drUtilisateur.Read()) 
      { 
       if (drUtilisateur["MotDePasse"].ToString() == strMotDePasse) 
       { 
        bOk = true; 
        break; 
       } 
      } 
     } 
     catch 
     { 
      bOk = false; 
     } 
     oConnexion.Close(); 
     return bOk; 
    } 
} 

這裏的第二種形式的一部分,具有用戶由於用戶名和密碼的第一個和最後一個名字:

private static ConnexionSaisieHeures WebFormConnexionSaisieHeures = new ConnexionSaisieHeures(); 

private void PrenomNomUtilisateur() 
     { 
      SqlConnection oConnexion = new SqlConnection(Convert.ToString(ConfigurationManager.ConnectionStrings["SaisieHeuresConnectionString"])); 
      SqlCommand oCommand = new SqlCommand("SELECT * FROM Utilisateurs WHERE NomUtilisateur='" + WebFormConnexionSaisieHeures.NomUtilisateur + "'", oConnexion); 

      try 
      { 
       // Ouverture de la connexion et exécution de la requête 
       oConnexion.Open(); 
       SqlDataReader drUtilisateur = oCommand.ExecuteReader(); 
       // Parcours de la liste des utilisateurs 
       while (drUtilisateur.Read()) 
       { 
        if (drUtilisateur["MotDePasse"].ToString() == WebFormConnexionSaisieHeures.MotDePasse) 
        { 
         PrenomNom = drUtilisateur["PrenomNom"].ToString(); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Exception : " + ex.Message); 
      } 
      oConnexion.Close(); 
     } 

我的第一個網頁表單的ASPX:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ConnexionSaisieHeures.aspx.cs" Inherits="SaisieHeures.ConnexionSaisieHeures" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 

<head runat="server"> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>WEATHER MEASURES : Connexion à l'application de saisie des heures</title> 
    <link href="SaisieHeures.css" rel="stylesheet" /> 
    <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet" /> 
</head> 

<body> 
    <header> 
     Saisie des heures - Connexion 
    </header> 

    <br /> 

    <article> 
     <form id="FormConnexionSaisieHeures" runat="server"> 
      <table id="ErreurConnexion" runat="server"> 
       <tr> 
        <td> 
         <asp:Label ID="lblErreurConnexion" runat="server" ForeColor="Red"></asp:Label> 
        </td> 
       </tr> 
      </table> 
      <br /> 
      <table id="Connexion"> 
       <tr> 
        <td> 
         <asp:Label ID="lblNomUtilisateur" runat="server" Text="Nom d'utilisateur :"></asp:Label> 
        </td> 
        <td> 
         <asp:TextBox ID="txtNomUtilisateur" runat="server" Style="text-align: center"></asp:TextBox> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <asp:Label ID="lblMotDePasse" runat="server" Text="Mot de passe :"></asp:Label> 
        </td> 
        <td> 
         <asp:TextBox ID="txtMotDePasse" runat="server" TextMode="Password" Style="text-align: center"></asp:TextBox> 
        </td> 
       </tr> 
       <tr> 
        <td colspan="2"> 
         <asp:Button ID="btnConnexion" runat="server" Text="Connexion" OnClick="btnConnexion_Click" /> 
        </td> 
       </tr> 
      </table> 
     </form> 
    </article> 
</body> 
</html> 

我的第二個網頁表單的ASPX:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SaisieHeures.aspx.cs" Inherits="SaisieHeures.SaisieHeures" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 

<head runat="server"> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>WEATHER MEASURES : Application de saisie des heures</title> 
    <link href="SaisieHeures.css" rel="stylesheet" /> 
    <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet" /> 
</head> 

<body> 
    <header> 
     Saisie des heures - Application 
    </header> 

    <br /> 

    <article> 
     <form id="FormSaisieHeures" runat="server"> 
      <table id="PrenomNomUtilisateur"> 
       <tr> 
        <td colspan="2"> 
         <asp:Label ID="lblPrenomNomUtilisateur" runat="server"></asp:Label> 
        </td> 
       </tr> 
      </table> 
      <br /> 
      <table id="SelectionMoisAnnee"> 
       <tr> 
        <td> 
         <asp:Button ID="btnMoisPrecedent" runat="server" Text="<" OnClick="btnMoisPrecedent_Click" /> 
         <asp:Label ID="lblMoisAnnee" runat="server"></asp:Label> 
         <asp:Button ID="btnMoisSuivant" runat="server" Text=">" OnClick="btnMoisSuivant_Click" /> 
        </td> 
       </tr> 
      </table> 
      <br /> 
      <table id="ErreurSaisie" runat="server"> 
       <tr> 
        <td> 
         <asp:Label ID="lblErreurSaisie" runat="server"></asp:Label> 
        </td> 
       </tr> 
      </table> 
      <br /> 
      <table id="FicheSaisieHeures"> 
       <tr> 
        <td> 
         <asp:Label ID="lblChoixSemaine" runat="server" Text="Semaine : "></asp:Label> 
        </td> 
        <td> 
         <asp:DropDownList ID="ddlSemaines" runat="server" OnSelectedIndexChanged="ddlSemaines_SelectedIndexChanged" AutoPostBack="True"></asp:DropDownList> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <asp:Label ID="lblJours" runat="server" Text="Jours de la semaine"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="lblNombreHeuresRealise" runat="server" Text="Nombre d'heures réalisées"></asp:Label> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <asp:Label ID="lblLundi" runat="server"></asp:Label> 
        </td> 
        <td> 
         <asp:TextBox ID="txtHeuresLundi" runat="server" Style="text-align: center"></asp:TextBox> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <asp:Label ID="lblMardi" runat="server"></asp:Label> 
        </td> 
        <td> 
         <asp:TextBox ID="txtHeuresMardi" runat="server" Style="text-align: center"></asp:TextBox> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <asp:Label ID="lblMercredi" runat="server"></asp:Label> 
        </td> 
        <td> 
         <asp:TextBox ID="txtHeuresMercredi" runat="server" Style="text-align: center"></asp:TextBox> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <asp:Label ID="lblJeudi" runat="server"></asp:Label> 
        </td> 
        <td> 
         <asp:TextBox ID="txtHeuresJeudi" runat="server" Style="text-align: center"></asp:TextBox> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <asp:Label ID="lblVendredi" runat="server"></asp:Label> 
        </td> 
        <td> 
         <asp:TextBox ID="txtHeuresVendredi" runat="server" Style="text-align: center"></asp:TextBox> 
        </td> 
       </tr> 
      </table> 
      <br /> 
      <table id="MessagesCalculTotalHeuresMois" runat="server"> 
       <tr> 
        <td> 
         <asp:Label ID="lblMessageCalculTotalHeuresMois" runat="server"></asp:Label> 
        </td> 
       </tr> 
      </table> 
      <br /> 
      <table id="TotalHeuresMois"> 
       <tr> 
        <td> 
         <asp:Label ID="lblTotalHeuresMois" runat="server" Text="Nombre total d'heures réalisées dans le mois"></asp:Label> 
         <br /> 
         <asp:TextBox ID="txtCalculTotalHeuresMois" runat="server" ReadOnly="True" Style="text-align: center"></asp:TextBox> 
        </td> 
       </tr> 
      </table> 
      <br /> 
      <table id="Boutons"> 
       <tr> 
        <td> 
         <asp:Button ID="btnValider" runat="server" Text="Valider" OnClick="btnValider_Click" /> 
        </td> 
        <td> 
         <asp:Button ID="btnAnnuler" runat="server" Text="Annuler" OnClick="btnAnnuler_Click" /> 
        </td> 
        <td> 
         <asp:Button ID="btnGenererExcel" runat="server" Text="Générer Excel" OnClick="btnGenererExcel_Click" /> 
        </td> 
        <td> 
         <asp:Button ID="btnDeconnexion" runat="server" Text="Déconnexion" OnClick="btnDeconnexion_Click" /> 
        </td> 
       </tr> 
      </table> 
     </form> 
    </article> 
</body> 
</html> 

txtNomUtilisateur.Textnull;它永遠不會恢復用戶輸入的文本。

我該如何解決它?

(全碼首先重新編輯,我可以有更多的信息我你需要,我真的想解決它)

附: :@ElekGuidolin在你的提議之前,我記下原始代碼,向你展示我原來做過的事情。

+0

您何時調用此屬性?你確定輸入文字嗎?其他東西是否覆蓋文字?顯示的代碼沒有問題。 – David

+2

它永遠不會爲空。即使給'Text'屬性賦值'null',String.Empty'也會返回([source])(https://referencesource.microsoft.com/#System.Web/UI/WebControls/TextBox.cs,92b4f85cd223169c ,引用)) –

+1

我想你可能有基於*的回發問題,它永遠不會恢復用戶輸入的文本*。檢查這個答案我希望它可以解決您的問題http://stackoverflow.com/a/34545012/2946329 –

回答

1

克里斯托弗。 對此感到抱歉。但事實上,我想通過更好的方式來解釋這個問題來改進答案。

當您使用Asp.Net Web窗體時,可以使用或不使用Request.Form獲取文本框的值,但只能在回發後獲取。 如果你想從Request.Form中獲得值,你需要在引號內填寫該字段的全部名稱,如果是asp.Net控件,它將是這樣的:ctl00 $ FeaturedContent $ txtMyTest。 但是,您也可以按照您首先發布的方式獲取價值。

所以,這兩種方式的工作,但只有在回發後,好嗎?

如果您在輸入時想着標籤會一起改變,您正在談論客戶端腳本。 這是另一篇文章和另一個主題的問題,對吧?!

public string TestProperty 
{ 
    get 
    { 
     //return txtMyTest.Text; 
     return Request.Form["ctl00$FeaturedContent$txtMyTest"]; 
    } 
    set 
    { 
     txtMyTest.Text = value; 
    } 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (IsPostBack) 
    { 
     lblMyTest.Text = TestProperty; 
    } 
} 

編輯:
@ChristopherLEBAS,因爲你正在創建你的第二個形成新的ConnexionSaisieHeures,在第二個值將永遠是空的,因爲你是在那一刻他們創造(私有靜態ConnexionSaisieHeures WebFormConnexionSaisieHeures = new ConnexionSaisieHeures();),並且不使用現有的填充表單。

當你想在其他頁面這些信息,也許是更好的辦法是爲使用Session或餅乾,因爲你需要保持頁面之間的狀態,這樣你就可以做這樣的事情:

protected void btnConnexion_Click(object sender, EventArgs e) 
{ 
    Session["NomUtilisateur"] = txtNomUtilisateur.Text; 
    Session["MotDePasse"] = FormsAuthentication.HashPasswordForStoringInConfigFile(txtMotDePasse.Text, "MD5"); 

    if (Authentifier(txtNomUtilisateur.Text, txtMotDePasse.Text)) 
    { 
     FormsAuthentication.RedirectFromLoginPage(txtNomUtilisateur.Text, false); 
    } 
    else 
    { 
     ErreurConnexion.Visible = true; 
     lblErreurConnexion.ForeColor = System.Drawing.Color.Red; 
     lblErreurConnexion.Text = "Erreur d'authentification : Le nom d'utilisateur ou le mot de passe est incorrect."; 
    } 
} 

,然後在第二個表格:

private void PrenomNomUtilisateur() 
{ 
    string _NomUtilisateur = Session["NomUtilisateur"]; 
    string _MotDePasse = Session["MotDePasse"]; 
    SqlConnection oConnexion = new SqlConnection(Convert.ToString(ConfigurationManager.ConnectionStrings["SaisieHeuresConnectionString"])); 
    SqlCommand oCommand = new SqlCommand("SELECT * FROM Utilisateurs WHERE NomUtilisateur='" + _NomUtilisateur + "'", oConnexion); 

    try 
    { 
     // Ouverture de la connexion et exécution de la requête 
     oConnexion.Open(); 
     SqlDataReader drUtilisateur = oCommand.ExecuteReader(); 
     // Parcours de la liste des utilisateurs 
     while (drUtilisateur.Read()) 
     { 
      if (drUtilisateur["MotDePasse"].ToString() == _MotDePasse) 
      { 
       PrenomNom = drUtilisateur["PrenomNom"].ToString(); 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Exception : " + ex.Message); 
    } 
    finally 
    { 
     oConnexion.Close(); 
    } 
} 

注意,我放在最後塊,因爲如果發生某種錯誤,連接仍然會被關閉。

+0

不幸的是,在這種情況下HttpException:Request不可用:( –

+0

您正在頁面上直接使用嗎?我認爲這是一個用戶控制 如果它在同一頁面中,爲什麼你需要它是一個屬性? –

+0

@ChristopherLEBAS更多問題: 您的按鈕「發送」有一個方法,它的點擊事件? 你在哪裏試圖得到這個值? Button_Click?Page_Load?Page_Init? 所有這一切取決於你在哪裏以及如何嘗試使用它 –

相關問題