Доступ к значению <input type = "text"> в codebehind

У меня есть небольшая форма на странице приложения SharePoint:

 <form method="post" id="registration-form" action="default.aspx" class="form-general cf" data-querycompletion-url="ajax/searchinstant.aspx">
     <input type="text" id="name" name="name" placeholder = "Your name" runat="server" />
          <input type="text" id= "company" name="company" placeholder= "Your company" runat="server"/>
    <input type="text" id="srchtxtx" class="search" name="visitor" placeholder="visitor" runat="server" />
    <input name="btnConfirm" id="Submit1" class="right" value="register" type="submit" runat="server" /></form>

В codebehinde default.aspx я хочу получить доступ к значениям как:

string val1 = name.value;
string val2 = company.value;
string val3 = srchtxtx.value;

Но приведенное выше возвращает пустую строку в val1, val2 и val3 соответственно. Но если я уберу runat = "server" от <input> теги, то я могу успешно получить доступ к значениям как:

string val1 = Request.Form["name"];
string val2 = Request.Form["company"];
string val3 = Request.Form["visitor"];

Вопрос в том, почему он возвращает пустые строковые значения, когда я использую runat = "server" в <input> теги?? По каким-то причинам я не смог удалить runat = "server" от <input> теги.

Есть ли другой способ доступа <input> значения в codebehind, предполагая, что атрибут runat = "server" в <input>??

Я также ограничен, чтобы не использовать <asp:TextBox> контроль.

1 ответ

Решение

Как я намекнул в HTML-форме, представленной с нулевыми значениями, это потому, что форма не runat="server" поэтому данные обратной передачи не обрабатываются asp.net, т.е. свойства srchtxtx и т. д. не заполняются.

Однако HTML-элементам по-прежнему присваиваются уникальные идентификаторы на странице, поэтому вы не можете просто сделать Request.Form["srchtxtx"];

Чтобы обойти это, вы можете использовать UniqueID элемента input, чтобы получить возвращенное значение:

HTML

<form method="post" id="registration-form" action="default.aspx" class="form-general cf" data-querycompletion-url="ajax/searchinstant.aspx">
    <input type="text" id="srchtxtx" name="srchtxtx" runat="server" />
    <input name="btnConfirm" id="Submit1" class="right" value="register" type="submit" runat="server" />
</form>

C#

protected void Page_Load(object sender, EventArgs e)
{
    string val1 = srchtxtx.Value; // always ""
    string val2 = Request.Form["srchtxtx"]; // always null
    string val3 = Request.Form[srchtxtx.UniqueID]; // input value
}
Другие вопросы по тегам