Доступ к значению <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
}