从aspx的文本框中获取值到代码后台的Asp.net

10

我正在使用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>

我为了获取用户名和密码文本框中的值而执行以下操作:

  1. 使用以下代码:

    string user = this.UserName.Text;
    string pass = this.Password.Text;
    
  2. 使用代码:

    Textbox UserName = this.FindControl("UserName");
    
  3. 删除aspx.design.cs文件,然后右键单击表单并将其转换为应用程序;

  4. 在设计器中添加以下代码行:

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

到目前为止,没有任何进展,当我到达这一行时:

string user = this.UserName.Text;

它给我抛出一个错误:

对象引用未设置为对象的实例。

您能否提出任何解决我的问题的建议?

1个回答

13
这是因为这些控件是模板的一部分。它们不直接位于页面上,而是在初始化Login控件时动态添加到页面中的。要访问它们,您需要使用FindControl
string user = ((TextBox)Login1.FindControl("UserName")).Text;

成功了!非常感谢!! - VCore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接