I have a simple form with some plain html input like bellow using ASP.NET Web Forms (not 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>
When I do a post back to the server the values of the text boxes are not contained in the Request.Form element. Is there some reason for this that I am missing. I am reluctant to use asp.net controls as the page is later going to require a fair amount of javascript for changing the ui and other stuff.
I know I could easily do this with MVC but unfortunatly a change to this is not an option at this time.
Cheers Colin G
Give the input both an id and a name and see if that doesn't solve your problem.
<input id="SchoolDetails_SchoolName"
name="SchoolDetails_SchoolName"
type="text"
value="<%= ViewModel.School.Name %>" />
The id property only identifies the tag within the DOM. The name property allows the tag to be posted back as part of a form. An ASP.NET control, or an HTML element with runat=server
, automatically gets both the name and id properties assigned.
HTML elements are not part of the ASP.NET lifecycle. An easy way to start would be to add the runat="server" attribute to your INPUT elements.
@Colin Use ClientIDMode="Static"
attribute and your server-side element name will remain the same on the client side even when you have runat="server" on the element. Hope this helps
@tvanfosson Cheers that worked just as I wanted.
@Bullins I really didn't want to use runat="server" as it causes the ID's of the controls to end up like ctl00_ContentPlaceHolder1_ctl00_SchoolDetails_Address_Postcode which makes it difficult to achieve what i am looking for.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.