2016-10-14 2 views
2

Я пытаюсь восстановить то, что пользователи вводят в текстовое поле.TextBox.Text имеет значение null, когда пользователь вводит данные в него

Я создаю аксессоры, чтобы сделать мои текстовые поля общедоступными, потому что раньше у меня были проблемы доступности.

Вот мой полный 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.Text является null; он никогда не восстанавливает текст, введенный пользователем.

Как я могу решить это, пожалуйста?

(Первый Пересоздать с полным кодом, я могу имел больше информации я вам нужно, я очень хочу, чтобы решить эту проблему)

P.S. : @ElekGuidolin Я представляю исходный код перед вашими предложениями, чтобы показать вам, что я сделал оригинально.

+0

Когда Вы ссылаетесь на эту собственность? Вы уверены, что текст вводится? Что-то еще переписывает текст? В показанном коде нет ничего плохого. – David

+2

Это никогда не имеет значения. Даже если вы присвоите 'null' свойству' Text', будет возвращен элемент 'String.Empty' ([источник] (https://referencesource.microsoft.com/#System.Web/UI/WebControls/TextBox.cs,92b4f85cd223169c , ссылки)) –

+1

Я полагаю, что вы, вероятно, проблема 'postback' на основе *, он никогда не восстанавливает текст, введенный пользователем *. Проверьте этот ответ. Я надеюсь, что он сможет решить вашу проблему. Http://stackoverflow.com/a/34545012/2946329 –

ответ

1

Christopher. Извините насчет путаницы. Но на самом деле я хотел бы улучшить ответ на лучший способ объяснить это.

Когда вы используете Web-формы Asp.Net, вы можете получить значение своего текстового поля с помощью или без 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; 
    } 
} 

EDIT:
@ChristopherLEBAS, так как вы создаете новый ConnexionSaisieHeures в вашей второй форме, значение в секунде всегда будет нулевым, потому что вы создаете их в тот момент (частный статический ConnexionSaisieHeures WebFormConnexionSaisieHeures = new ConnexionSaisieHeures();) и не использует существующую заполненную форму.

Как вы хотите иметь эту информацию в другой странице, возможно, лучше всего использовать либо сеанс или печенье, потому что вам нужно для поддержания состояния между страницами, так что вы можете сделать что-то вроде этого:

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: Запрос не доступен в этом контексте :( –

+0

Вы используете Direct на странице? Я думал, что это User Control. Если он есть на той же странице, зачем вам это нужно? –

+0

@ChristopherLEBAS Еще вопросы: Есть ли у вашей кнопки «Отправить» метод его кликов? Где вы пытаетесь получить это значение? Button_Click? Page_Load? Page_Init? Все зависит от того, где и как вы пытаетесь чтобы использовать его. –

Смежные вопросы