На моей веб-странице есть дополнительная контактная панель, в которой пользователь может добавлять текст ввода для любого контакта, например, сотового телефона или электронной почты, когда пользователь нажимает кнопку создания контакта, он вносит текст ввода с такими атрибутами, как уникальный идентификатор (например, txtrelat1
) или runat="server"
(на клиентской стороне, но на веб-странице есть входной текст с id="txtrelat0"
по умолчанию), и когда пользователь нажимает кнопку отправки, вызывает метод register
на стороне сервера по событию onserverclick, Основной вопрос: когда я использую form1.FindControl("txtrelat0")
, он находит и я могу конвертировать это до HtmlInputText
, но когда я хочу form1.FindControl("txtrelat1")
, он не находит и не возвращает null? thank all allПочему метод findcontrol ("x") ASP.NET не может найти элемент управления HTML, созданный с помощью javascript runtime?
ответ
FindControl
находит элементы управления сервером на странице или контроле, выполняемом в настоящее время. Он имеет дело только с элементами управления сервером. Код позади может по-прежнему читать значения, размещенные с добавленных вами входов. Вы можете позвонить по телефону Request.Form["x"]
.
Недостатком является то, что если вы добавите дополнительные элементы управления на страницу и затем сделаете обратную передачу, страница сервера не будет «запоминать» добавленные вами элементы. Они просто исчезнут после обратной передачи.
Смешивание этих типов поведения клиент/сервер с помощью веб-форм не является забавным. Возможно, вам будет проще сделать это со всеми элементами управления сервером. Просто установите Visible="false"
или "true"
в код вашего сервера в ответ на события сервера. Или вы можете сделать все это на клиенте, используя вызовы API.
Несмотря на то, что мне не нравятся такие веб-формы, когда мне приходится работать в проекте webforms, часто проще делать вещи с помощью веб-форм с помощью серверных элементов управления.
Вы не можете найти элементы управления JavaScript через код позади. –
Просто добавление атрибута 'runat =" server "' с клиентской стороны не означает, что его собирают. Если вы ищете опубликованные значения со стороны клиента, вы можете выкопать их из свойства 'Request.Forms' через атрибут' name' вашего текстового элемента. – mason