views:

1066

answers:

3

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

+2  A: 

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.

Bullines
Bingo, he beat me to it. :) That should solve your problem.
Matt Peterson
It will solve it, but not because the problem with the ASP.NET lifecycle. The problem is that the inputs have no names and so never get submitted by the client with the form.
tvanfosson
<input /> elements will make it into Request.Form regardless of runat="server". They just need to be named (ie name="..." as opposed to having only id="..." as posted).
Crescent Fresh
+4  A: 

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.

tvanfosson
A: 

@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.

Colin G