Почему FindControl не может найти поле пароля в моей форме? - PullRequest
1 голос
/ 05 апреля 2011

Если это невозможно, как я могу получить пароль с поля?

    dim pw1 as textbox, password as string
    pw1 = ctype(FindControl("PasswordStr"), textbox)
    password = pw1.text

Нет: System.NullReferenceException: для ссылки на объект не задан экземпляр объекта.

Этот код находится в подпрограмме, которую я звоню по нажатию кнопки


Под редакцией: rockinthesixstring

Вот как ОП сказал, что его разметка 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>

Ответы [ 4 ]

2 голосов
/ 05 апреля 2011

Если поле пароля не находится в другом «контейнере», например, в повторителе, тогда вы можете просто получить к нему доступ.

Какой идентификатор у вашего поля пароля?

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

Вы получаете к нему доступ так:

pw1 = txtPassword.Text;
1 голос
/ 05 апреля 2011

Если ваше поле пароля - это просто элемент управления ASP.NET на вашей странице (не вложенный в другой элемент управления, такой как GridView ItemTemplate), вы можете просто сделать это:

string password = PasswordStr.Text;
1 голос
/ 05 апреля 2011

Вы не используете серверный элемент управления по внешнему виду (на основе вашего комментария)

Используйте элемент управления на странице aspx, как показано ниже:

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

Вы можете получить доступ к серверууправление из кода файла, используя

passwordInput.Text
0 голосов
/ 05 апреля 2011

Поскольку мы не знаем, как выглядит ваш 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, что означает, что если у вас есть другой элемент управления (например, FormVw), то ваш код не найдетвложенное текстовое поле.


РЕДАКТИРОВАТЬ

Вы сказали, что ваша форма выглядит следующим образом

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

Измените ее на

<form runat="server" id="form1">
  <p>
    <label for="passwordStr">Password</label>
    <asp:TextBox runat="server" TextMode="password" ID="passwordStr" maxlength="50">  
  </p>
</form>

Затемполучить доступ к полю пароля, как это

string password = passwordStr.Text;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...