У меня есть базовая HTML-форма, которая вставляется в тег div на стороне сервера в зависимости от того, сколько записей существует в базе данных. Эта HTML-форма выходит просто отлично, и все выглядит хорошо. Но на моей странице действий я не могу получить доступ к элементам ввода из кода позади. Я пробовал использовать область запроса, но при таком подходе ничего не вышло. Есть другие предложения?
Все приведенные ниже предложения прекрасны, и обычно я бы так и поступил. Но эти формы создаются на лету после компиляции страницы, поэтому runat = 'server' ничего не сделал для меня. Он просто передал это на страницу html.





Обычно это делается с помощью Request.Form["elementName"].
Например, если у вас есть <input type = "text" name = "email" />, вы можете использовать Request.Form["email"] для доступа к его значению.
Обновлено: подумал о другом.
Вы говорите, что создаете форму динамически - вы действительно имеете в виду <form> и его содержимое, потому что asp.net имеет проблемы с несколькими формами на странице и уже создает для вас одну уберформу.
Самый простой способ ИМО - включить идентификатор и тег сервера runat во все ваши элементы.
<div id = "MYDIV" runat = "server" />
Поскольку похоже, что это динамически вставляемые элементы управления, вы можете оценить FindControl ().
Вот в чем суть моей проблемы: атрибут runat никогда не компилируется, поэтому я не могу получить к ним должный доступ.
Я предполагаю, что вам нужно установить эти входные элементы на runat = "сервер".
Таким образом, вы не сможете получить доступ к элементу управления
<input type = "text" name = "email" id = "myTextBox" />
Но ты сможешь работать с
<input type = "text" name = "email" id = "myTextBox" runat = "server" />
И прочтите его, используя
string myStringFromTheInput = myTextBox.Value;
Когда я это делаю, у меня появляется {control} not found in current context ...
Поскольку вы используете код программной части asp.net, добавьте к элементу идентификатор и runat = server.
Затем вы можете ссылаться на объекты в коде.
Если вы получаете доступ к простой HTML-форме, ее необходимо отправить на сервер с помощью кнопки отправки (или через сообщение javascript). Обычно это означает, что определение вашей формы будет выглядеть следующим образом (у меня не хватает памяти, убедитесь, что вы проверяете правильность элементов html):
<form method = "POST" action = "page.aspx">
<input id = "customerName" name = "customerName" type = "Text" />
<input id = "customerPhone" name = "customerPhone" type = "Text" />
<input value = "Save" type = "Submit" />
</form>
Вы должны иметь доступ к данным customerName и customerPhone следующим образом:
string n = String.Format("{0}", Request.Form["customerName"]);
Если у вас есть method = "GET" в форме (не рекомендуется, это мешает вашему URL-адресу), вам нужно будет получить доступ к данным формы следующим образом:
string n = String.Format("{0}", Request.QueryString["customerName"]);
Это, конечно, будет работать только в том случае, если форма была «Размещена», «Отправлена» или выполнена через «Postback». (т.е. кто-то нажал кнопку «Сохранить», или это было сделано программно через javascript.)
Кроме того, имейте в виду, что доступ к этим элементам таким образом может быть выполнен только в том случае, если вы не используете серверные элементы управления (например, runat = "server"), при этом у серверных элементов управления идентификатор и имя отличаются.
Это и было проблемой, мне не хватало атрибута method = post. Спасибо много.
Спасибо, я искал это в последнее время.
Можно ли также присвоить значения этим элементам управления с помощью запроса? При попытке сделать это у меня возникла ошибка "только для чтения".
Я использовал только Id, вам нужно указать Name, иначе он не работает. Спасибо за помощь!
Вам необходимо использовать двойные кавычки, то есть "customerName". Одиночные кавычки не работают.
Хорошая идея, но похоже, что он вставляет простой HTML; не динамические элементы управления, поэтому атрибут runat никогда не будет обработан