web-dev-qa-db-fra.com

Asp.net obtient la valeur de Textbox dans aspx pour coder derrière

Je crée un système de connexion en asp.net et en langage de programmation C #. Le code derrière pour gérer l'utilisateur et le mot de passe est fait. Mais dans la couche d'affichage, je trouve difficile d'obtenir les valeurs de la zone de texte du nom d'utilisateur et de la zone de texte du mot de passe et de les transmettre à codebehind.

Les deux zones de texte sont identifiées par ID et dans mes quelques compétences en programmation, un ID devrait suffire pour accéder aux éléments.

Ceci est ma page de connexion aspx:

 <asp:Login ID="Login1" runat="server" ViewStateMode="Disabled" RenderOuterTable="false">
        <LayoutTemplate>
            <p class="validation-summary-errors">
                <asp:Literal runat="server" ID="FailureText" />
            </p>
            <fieldset>
                <legend>Log in Form</legend>
                <ol>
                    <li>
                        <asp:Label ID="Label1" runat="server" AssociatedControlID="UserName">User name</asp:Label>
                        <asp:TextBox runat="server" ID="UserName" />
                        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="UserName" CssClass="field-validation-error" ErrorMessage="The user name field is required." />
                    </li>
                    <li>
                        <asp:Label ID="Label2" runat="server" AssociatedControlID="Password">Password</asp:Label>
                        <asp:TextBox runat="server" ID="Password" TextMode="Password" />
                        <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="Password" CssClass="field-validation-error" ErrorMessage="The password field is required." />
                    </li>
                    <li>
                        <asp:CheckBox runat="server" ID="RememberMe" />
                        <asp:Label ID="Label3" runat="server" AssociatedControlID="RememberMe" CssClass="checkbox">Remember me?</asp:Label>
                    </li>
                </ol>
                <asp:Button ID="Button1" runat="server" CommandName="Login" Text="Log in"  OnClick="Button1_Click"/>
            </fieldset>
        </LayoutTemplate>
    </asp:Login>

J'ai obtenu des valeurs des zones de texte UserName et Password:

  1. En utilisant le code:

    string user = this.UserName.Text;
    string pass = this.Password.Text;
    
  2. En utilisant le code:

    Textbox UserName = this.FindControl("UserName");
    
  3. Supprimé le aspx.design.cs et faites un clic droit sur le formulaire et convertissez-le en application;

  4. Dans le concepteur, ajoutez les lignes de code suivantes:

    protected global::System.Web.UI.WebControls.TextBox UserName;
    protected global::System.Web.UI.WebControls.TextBox Password;
    

Rien n'a fonctionné jusqu'à présent, et quand j'atteins cette ligne:

string user = this.UserName.Text;

Cela me lance une erreur:

La référence d'objet ne définit pas une instance d'un objet.

Pouvez-vous suggérer une solution à mon problème?

9
VCore

En effet, ces contrôles font partie d'un modèle. Ils ne sont pas directement sur la page, ils y sont ajoutés dynamiquement lorsque le contrôle Login est initialisé. Pour y accéder, vous avez besoin de FindControl:

string user = ((TextBox)Login1.FindControl("UserName")).Text;
11
Andrei