Объяснение
Проблема заключается в том, что при отправке запроса на сервер для этой страницы создается новый экземпляр страницы вместе со всеми элементами управления, определенными в вашем файле .aspx.Этот новый экземпляр страницы и дочерние элементы управления начинаются без данных.
Когда вы отправляете запрос «post» обратно на сервер («Postback»), страница просматривает коллекцию форм запроса (данные из тегов , отправленных браузером), и пытается обновить веб-элементы управления на странице данными, найденными в этой коллекции форм.
Кроме того, но помимо этого, элементы управления с поддержкой состояния просмотра могут пытаться заполнитьсами основаны на данных, найденных в viewstate, оставленном другим экземпляром того же элемента управления из предыдущего запроса.
В частности, если вы посмотрите на WebBontrol TextBox, вы увидите, что он реализует интерфейс IPostBackDataHandler.В начале запроса страница просматривает все значения в коллекции форм, представленные запросом.Когда страница находит значение в коллекции форм, ключ которой соответствует идентификатору элемента управления TextBox, страница может применить это обновленное значение к этому элементу управления TextBox, используя метод LoadPostData интерфейса IPostBackDataHandler.
ЗвучитНапример, вы добавляете несколько строк данных в таблицу и отправляете их все на сервер одновременно.Вы можете сделать это, но проблема в том, что на вашей странице нет элементов управления, которые могли бы служить целями для этих данных.В частности, вам нужно назначить атрибут name
ваших тегов , чтобы данные были отправлены на сервер, но что бы вы указали в качестве значения атрибута name
?Это не будет соответствовать элементу управления на вашей странице.Кроме того, если вы отправляете несколько строк одновременно, как бы вы отличали одну от другой?
Возможное решение
Предполагая, что ваша страница после манипуляций с JavaScript и пользовательского ввода выглядит примерно так:
<table>
<thead><tr></th>First Name</th><th>Last Name</th></tr></thead>
<tbody>
<tr><td><input name="FirstName[0]" value="John" /></td><td><input name="LastName[0]" value="Smith" /></td></tr>
<tr><td><input name="FirstName[1]" value="Jane" /></td><td><input name="LastName[1]" value="Doe" /></td></tr>
<tr><td><input name="FirstName[2]" value="Spider" /></td><td><input name="LastName[2]" value="Man" /></td></tr>
</tbody>
</table>
В своем коде в процессе обратной передачи вы можете получить доступ к этим данным, используя следующий код:
string firstName = Request.Form["FirstName[0]"];
string lastName = Request.Form["LastName[0]"];
Вы также можете сделать что-то вроде этого:
int index = 0;
bool dataFound;
do
{
dataFound = false;
string firstName = Request.Form["FirstName["+index+"]"];
if (firstName != null)
dataFound = true;
string lastName = Request.Form["LastName["+index+"]"];
if (lastName != null)
dataFound = true;
// do something with firstName and lastName ...
index++;
} while (dataFound);