Asp.net 为什么可以';t FindControl是否在我的表单上找到密码字段?

Asp.net 为什么可以';t FindControl是否在我的表单上找到密码字段?,asp.net,findcontrol,Asp.net,Findcontrol,如果不可能,我如何从字段中获取密码 dim pw1 as textbox, password as string pw1 = ctype(FindControl("PasswordStr"), textbox) password = pw1.text Nope:System.NullReferenceException:对象引用未设置为对象的实例 此代码位于我通过单击按钮调用的sub中 编辑:RocktheSixstring 下面是OP所说的他的ASPX标记 <

如果不可能,我如何从字段中获取密码

    dim pw1 as textbox, password as string
    pw1 = ctype(FindControl("PasswordStr"), textbox)
    password = pw1.text
Nope:System.NullReferenceException:对象引用未设置为对象的实例

此代码位于我通过单击按钮调用的sub中


编辑:RocktheSixstring

下面是OP所说的他的ASPX标记

<form runat="server" id="form1">
  <p>
    <label for="passwordStr">Password</label>
    <input type="text" textmode="password" id="passwordStr" name="passwordStr" maxlength="50">  
  </p>
</form>


密码


如果密码字段不在另一个“容器”(如中继器)中,则您只需访问它即可

密码字段的ID是什么

<asp:TextBox ID="txtPassword" TextMode="password" runat="server" />

如果密码字段不在另一个“容器”中(如中继器),那么您只需访问它即可

密码字段的ID是什么

<asp:TextBox ID="txtPassword" TextMode="password" runat="server" />

从外观上看,您没有使用服务器控件(根据您的评论)

在aspx页面上使用控件,如下所示:

<asp:TextBox TextMode="Password" ID="passwordInput" runat"server"></asp:TextBox>

从外观上看,您没有使用服务器控件(根据您的评论)

在aspx页面上使用控件,如下所示:

<asp:TextBox TextMode="Password" ID="passwordInput" runat"server"></asp:TextBox>

如果您的密码字段只是页面上的一个ASP.NET控件(未嵌套在其他控件中,如GridView ItemTemplate),则可以执行以下操作:

string password = PasswordStr.Text;

如果您的密码字段只是页面上的一个ASP.NET控件(未嵌套在其他控件中,如GridView ItemTemplate),则可以执行以下操作:

string password = PasswordStr.Text;

因为我们不知道你的ASPX是什么样子,所以我们只是在黑暗中拍摄

假设你有一个像这样的aspx

<form id="form1" runat="server" DefaultFocus="formVw$txtName">
    <div>
        <asp:FormView ID="formVw" runat="server">
            <ItemTemplate>
                Name: 
                <asp:TextBox ID="txtName" runat="server"
                        Text='<%# Eval("FirstName") + " " + Eval("LastName") %>' />
            </ItemTemplate>
        </asp:FormView>
    </div>
</form>
TextBox tb = this.FindControl("form1$formVw$txtName") as TextBox;
if (tb != null)
{
    //Access TextBox control
}
<form runat="server" id="form1">
  <p>
    <label for="passwordStr">Password</label>
    <input type="text" textmode="password" id="passwordStr" name="passwordStr" maxlength="50">  
  </p>
</form>
string password = passwordStr.Text;
您最初发布的代码正在
表单
中查找控件,这意味着,如果您有另一个控件(
FormVw
),那么您的代码将找不到嵌套的文本框


编辑 你说你的表格是这样的

<form id="form1" runat="server" DefaultFocus="formVw$txtName">
    <div>
        <asp:FormView ID="formVw" runat="server">
            <ItemTemplate>
                Name: 
                <asp:TextBox ID="txtName" runat="server"
                        Text='<%# Eval("FirstName") + " " + Eval("LastName") %>' />
            </ItemTemplate>
        </asp:FormView>
    </div>
</form>
TextBox tb = this.FindControl("form1$formVw$txtName") as TextBox;
if (tb != null)
{
    //Access TextBox control
}
<form runat="server" id="form1">
  <p>
    <label for="passwordStr">Password</label>
    <input type="text" textmode="password" id="passwordStr" name="passwordStr" maxlength="50">  
  </p>
</form>
string password = passwordStr.Text;

因为我们不知道你的ASPX是什么样子,所以我们只是在黑暗中拍摄

假设你有一个像这样的aspx

<form id="form1" runat="server" DefaultFocus="formVw$txtName">
    <div>
        <asp:FormView ID="formVw" runat="server">
            <ItemTemplate>
                Name: 
                <asp:TextBox ID="txtName" runat="server"
                        Text='<%# Eval("FirstName") + " " + Eval("LastName") %>' />
            </ItemTemplate>
        </asp:FormView>
    </div>
</form>
TextBox tb = this.FindControl("form1$formVw$txtName") as TextBox;
if (tb != null)
{
    //Access TextBox control
}
<form runat="server" id="form1">
  <p>
    <label for="passwordStr">Password</label>
    <input type="text" textmode="password" id="passwordStr" name="passwordStr" maxlength="50">  
  </p>
</form>
string password = passwordStr.Text;
您最初发布的代码正在
表单
中查找控件,这意味着,如果您有另一个控件(
FormVw
),那么您的代码将找不到嵌套的文本框


编辑 你说你的表格是这样的

<form id="form1" runat="server" DefaultFocus="formVw$txtName">
    <div>
        <asp:FormView ID="formVw" runat="server">
            <ItemTemplate>
                Name: 
                <asp:TextBox ID="txtName" runat="server"
                        Text='<%# Eval("FirstName") + " " + Eval("LastName") %>' />
            </ItemTemplate>
        </asp:FormView>
    </div>
</form>
TextBox tb = this.FindControl("form1$formVw$txtName") as TextBox;
if (tb != null)
{
    //Access TextBox control
}
<form runat="server" id="form1">
  <p>
    <label for="passwordStr">Password</label>
    <input type="text" textmode="password" id="passwordStr" name="passwordStr" maxlength="50">  
  </p>
</form>
string password = passwordStr.Text;

你能发布文本框控件的查看代码吗?你能发布页面的aspx部分吗?我尝试了两种方法:Password

和Password

是的,你们是对的。我缺少runat=server和这些输入,其中只有@rg89-对于将来,最好将更新的代码放在问题(编辑)中,而不是放在注释中。注释不能像问题一样很好地格式化代码。你能发布文本框控件的查看代码吗?你能发布页面的aspx部分吗?我尝试了两种方法:密码和密码是的,你们是对的。我缺少runat=server和这些输入,其中只有@rg89-对于将来,最好将更新的代码放在问题(编辑)中,而不是放在注释中。注释不能像问题一样很好地格式化代码。如果
PasswordStr
未嵌套在另一个控件中,则可以使用此方法。如果存在,您也可以在PageLoad上找到它。OP表示编译器找不到控件。@rg89:您需要在控件上运行runat=“server”,才能使用FindControl,并在代码隐藏中以这种方式访问控件。请参阅我对您原始问题的评论或Jack Marchetti的答案。如果
PasswordStr
未嵌套在另一个控件中,则此操作有效。如果它存在,您也可以在PageLoad上找到它。OP表示编译器找不到控件。@rg89:您需要在控件上运行runat=“server”,才能使用FindControl,并在代码隐藏中以这种方式访问控件。请参阅我对您原始问题的评论或Jack Marchetti的回答。我的页面本质上是这样的:密码

我不使用visual studio。如果您的表单如此简单,您可以按照其他人所说的做<代码>字符串密码=密码str.Text
FindControl
仅在具有嵌套控件的情况下才有用。我的页面本质上是这样的:Password

我不使用visual studio。如果您的表单如此简单,您只需执行其他人所说的操作即可<代码>字符串密码=密码str.Text
FindControl
仅在具有嵌套控件时才有用。