Согласно этому как получить доступ к элементам управления html в коде позади, Я должен иметь возможность добавить runat = "server" 'к своим элементам html следующим образом:
<input type="email" id="email" runat="server" />
... а затем получить доступ к элементу html по его идентификатору из C #, например:
String usersEmail = email.Value;
Однако попытка сделать это приводит к "Имя 'email' не существует в текущем контексте"
Действительно ли попытки получить доступ к элементам html для манипуляций из кода программной части безнадежны?
ОБНОВИТЬ
В ответ / ответ на предложение Стива Брукса вот что у меня в верхней части моего файла ascx:
<%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="PostTravelWizardWebPartUserControl.ascx.cs"
Inherits="PostTravelWizard.PostTravelWizardWebPart.PostTravelWizardWebPartUserControl" %>
... тогда как мистер Брукс рекомендует что-то вроде этого:
<%@Page Language="C#" AutoEventWireup="false" CodeFile="Default.aspx.cs"
Inherits="_Default"%>
Это достаточно близко? IOW вместо «Page» у меня есть «Control» (происходит от UserControl); У меня есть «CodeBehind» вместо «CodeFile», и мое наследство отличается.
Я попытался переключить AutoEventWireup на false, но это не помогло.
ОБНОВЛЕНИЕ 2
Спасибо, Торин,
Я понятия не имел об этом требовании (заключить все в тег "form"), но даже после этого:
<form id="formPostTravel" runat="server">
. . . (all the html elements)
</form>
...это не имеет значения; Я по-прежнему получаю: «Имя 'email' не существует в текущем контексте»
ОБНОВЛЕНИЕ 3
Еще один ответ на предложения Стива Брукса, которые заключались в «изменении CodeBehind на CodeFile и добавлении атрибута Inherits, который должен соответствовать имени класса вашего кода позади файла. Другое предложение - изменить идентификатор на EmailAddress или что-то в этом роде, поскольку это может быть своего рода конфликт имен с зарезервированным словом! ":
Сначала я изменил CodeBehind на CodeFile
Затем я проверил, соответствует ли атрибут Inherits имени класса моего кода файла. Этот файл:
namespace PostTravelWizard.PostTravelWizardWebPart
{
public partial class PostTravelWizardWebPartUserControl : UserControl
... и наследуемое значение - "PostTravelWizard.PostTravelWizardWebPart.PostTravelWizardWebPartUserControl"
Наконец, я также изменил идентификатор HTML-элемента с «email» на «emailaddress»:
<input type="email" id="emailaddress" runat="server" />
... но теперь я получаю: «Имя 'emailaddress' не существует в текущем контексте»
ОБНОВЛЕНИЕ 4
Для небольшого контекста того, что здесь делается.
Здесь определяется ввод "email" в файле * .ascx в блоке html:
<input type="email" id="emailaddress" runat="server" />
И вот как я пытаюсь получить доступ к его значению из соответствующего файла * .ascx.cs:
namespace PostTravelWizard.PostTravelWizardWebPart
{
public partial class PostTravelWizardWebPartUserControl : UserControl
{
. . .
String usersEmail = emailaddress.Value;
Но я получаю вознаграждение: «Имя 'emailaddress' не существует в текущем контексте»
ОБНОВЛЕНИЕ 5
Следуя этому совету Стивена Брукса:
вы можете щелкнуть правой кнопкой мыши файл ascx и просмотреть конструктор, а затем перейти к просмотру кода. Это вполне может восстановить файл дизайнера
Мне удалось получить некоторые поля в файле designer.cs; остальные (большинство), потому что они начинаются «скрытыми»? Я не знаю...