У меня есть простая форма с простым вводом html, как показано ниже, с использованием веб-форм ASP.NET (не MVC)
<table id = "tbl_SchoolDetails">
<tbody id = "tbody_SchoolDetails">
<tr>
<td>
School Name
</td>
<td>
<input id = "SchoolDetails_SchoolName" type = "text" value = "<%= ViewModel.School.Name %>" />
</td>
</tr>
<tr>
<td>
Head Teacher
</td>
<td>
<input id = "SchoolDetails_HeadTeacher_Name" type = "text" value = "<%= ViewModel.School.HeadTeacher.Name %>" />
</td>
</tr>
<tr>
<td>
Head Teacher Email
</td>
<td>
<input id = "SchoolDetails_HeadTeacher_Email" type = "text" value = "<%= ViewModel.School.HeadTeacher.Email %>" />
</td>
</tr>
<tr>
<td>
Regent/Placement Contact
</td>
<td>
<input id = "SchoolDetails_Regent_Name" type = "text" value = "<%= ViewModel.School.Regent.Name %>" />
</td>
</tr>
</tbody>
</table>
Когда я отправляю сообщение на сервер, значения текстовых полей не содержатся в элементе Request.Form. Есть ли причина, по которой мне не хватает? Я не хочу использовать элементы управления asp.net, поскольку позже для страницы потребуется изрядное количество javascript для изменения пользовательского интерфейса и прочего.
Я знаю, что могу легко сделать это с помощью MVC, но, к сожалению, в настоящее время это невозможно изменить.
Ваше здоровье Колин Джи
Вы знаете, что Request.Form - это набор пар имя / значение, которые браузер отправил по запросу. только отправляет их, когда выполняется form.submit (), либо через javascript (скажем, обратная передача элемента управления asp.net), либо нажата кнопка отправки?





Элементы HTML не являются частью жизненного цикла ASP.NET. Самый простой способ начать - добавить атрибут runat = "server" к вашим элементам INPUT.
Это решит ее, но не потому, что проблема с жизненным циклом ASP.NET. Проблема в том, что входные данные не имеют имен и поэтому никогда не отправляются клиентом вместе с формой.
Элементы <input /> попадут в Request.Form независимо от runat = "server". Им просто нужно дать имя (т.е. name = "..." вместо того, чтобы иметь только id = "...", как указано).
Дайте входу и идентификатор, и имя и посмотрите, не решит ли это вашу проблему.
<input id = "SchoolDetails_SchoolName"
name = "SchoolDetails_SchoolName"
type = "text"
value = "<%= ViewModel.School.Name %>" />
Свойство id идентифицирует только тег в DOM. имя свойство позволяет отправить тег обратно как часть формы. Элемент управления ASP.NET или элемент HTML с runat=server автоматически получает присвоенные свойства name и id.
@tvanfosson Приветствия, которые сработали так, как я хотел.
@Bullins Я действительно не хотел использовать runat = "server", поскольку это приводит к тому, что идентификаторы элементов управления заканчиваются наподобие ctl00_ContentPlaceHolder1_ctl00_SchoolDetails_Address_Postcode, что затрудняет достижение того, что я ищу.
@Colin Используйте атрибут ClientIDMode = "Static", и ваше имя элемента на стороне сервера останется таким же на стороне клиента, даже если у вас есть runat = "server" для элемента. Надеюсь это поможет
Этот html находится внутри элемента <form>, да?