bootstrap - Forme valores de publicación utilizando controles html simples en formularios web ASP.NET
textbox asp net bootstrap (4)
Tengo un formulario simple con algo de entrada html simple como el siguiente usando ASP.NET Web Forms (no 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>
Cuando realizo una publicación en el servidor, los valores de los cuadros de texto no están contenidos en el elemento Request.Form. ¿Hay alguna razón para esto que me estoy perdiendo? Soy reacio a usar controles asp.net ya que la página requerirá una cantidad considerable de javascript para cambiar la interfaz de usuario y otras cosas.
Sé que podría hacer esto fácilmente con MVC pero desafortunadamente un cambio en esto no es una opción en este momento.
Saludos Colin G
Los elementos HTML no son parte del ciclo de vida de ASP.NET. Una manera fácil de comenzar sería agregar el atributo runat = "server" a sus elementos INPUT.
Proporcione tanto la identificación como el nombre y vea si eso no resuelve su problema.
<input id="SchoolDetails_SchoolName"
name="SchoolDetails_SchoolName"
type="text"
value="<%= ViewModel.School.Name %>" />
La propiedad id solo identifica la etiqueta dentro del DOM. La propiedad de nombre permite que la etiqueta se publique nuevamente como parte de un formulario. Un control ASP.NET o un elemento HTML con runat=server
, automáticamente asigna el nombre y las propiedades de id.
@tvanfosson Saludos que funcionaron como yo quería.
@Bullins Realmente no quería usar runat = "server" ya que causa que los ID de los controles terminen como ctl00_ContentPlaceHolder1_ctl00_SchoolDetails_Address_Postcode lo que hace que sea difícil lograr lo que estoy buscando.
@Colin Use ClientIDMode="Static"
atributo ClientIDMode="Static"
y su nombre del elemento del lado del servidor seguirá siendo el mismo en el lado del cliente, incluso cuando tenga runat = "server" en el elemento. Espero que esto ayude