web-dev-qa-db-ja.com

Asp.netは、aspxのTextboxからコードビハインドに値を取得します

ログインシステムをasp.netおよびC#プログラミング言語で作成しています。ユーザーとパスワードを処理するコードビハインドが完了しました。しかし、ビューレイヤーでは、ユーザー名テキストボックスとパスワードテキストボックスから値を取得し、コードビハインドに渡すのが面倒です。

両方のテキストボックスはIDで識別されます。プログラミングのいくつかのスキルでは、IDは要素にアクセスするのに十分なはずです。

これは私の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>

これは、UserNameおよびPassword Textboxesから値を取得しました。

  1. コードの使用:

    string user = this.UserName.Text;
    string pass = this.Password.Text;
    
  2. コードの使用:

    Textbox UserName = this.FindControl("UserName");
    
  3. aspx.design.csを削除し、フォームを右クリックして、アプリケーションに変換します。

  4. デザイナーで、次のコード行を追加します。

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

これまでのところ何も機能せず、この行に到達すると:

string user = this.UserName.Text;

エラーがスローされます:

オブジェクト参照は、オブジェクトのインスタンスを設定しません。

私の問題の解決策を提案できますか?

9
VCore

これは、これらのコントロールがテンプレートの一部であるためです。これらはページ上に直接ではなく、Loginコントロールが初期化されるときに動的に追加されます。それらにアクセスするには、FindControlが必要です。

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