Embedding Forms in a GridView
Posted on 2007-03-28
I have an ASP.NET 2.0 page with a GridView on it, populated programmatically from the code-behind.
Each GridView row displays a unique object. I'd like each row of the GridView to have it's own little form that submits to another page, where a user can edit the object.
To accomplish this, I've inserted the following code into one of the template fields:
<form id="frmEditObject<%# Eval("ObjectID") %>" action="editObject.aspx" method="POST">
<input type="hidden" name="ObjectID" value="<%# Eval("ObjectID") %>" />
This works great, EXCEPT for two things:
Error: 'document.forms.frmEditObject1' is null or not an object.
I know its there because I can see it in the page source after the page loads.
Second, I have a custom footer with alphabet letters A - Z that allow the user to display only objects of one letter at a time. Like, they click on A and see Apple, Airplane, Angle, Aurora, etc. These links BREAK when I add form code to the GridView rows, and when you click on them, they throw this error:
Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
Here's what I think: I think that the form code I've inserted into the rows is interfering with the parent ASP.NET page form. So, when the page gets to the first row, it's already seen <form name="aspnetForm"> and now it's seeing <form id="frmEditObject1"> and it's getting confused. Then, it sees the </form> in my first row, and afterwards everything is fine (all the subsequent rows work), but, this breaks the aspnetForm, and so my alphabet links at the bottom, which are postbacks, also break.
Whew, long post.
Anyhow, what's the solution for this problem? Is it even correct to embed HTML forms in a GridView, or is there a different way I should be doing this?