I’m using an checkbox on an ASP.NET MVC form like so:
<%=Html.CheckBox("AgreeToRules", Model.AgreeToRules)%>
The AgreeToRules property on the model is a boolean value. During testing, this all worked fine. However, now that we’ve gone live with this app, I’m seeing a relatively small but significant number of errors with the following messaging:
System.Web.HttpUnhandledException:
Exception of type
‘System.Web.HttpUnhandledException’
was thrown. —>
System.InvalidOperationException: The
parameter conversion from type
‘System.String’ to type
‘System.Boolean’ failed. See the inner
exception for more information. —>
System.FormatException: Y is not a
valid value for Boolean. —>
System.FormatException: String was not
recognized as a valid Boolean.
This appears to happen when the view engine tries to render the form after a post, and the value of the checkbox that is returned from the ValueProvider looks like:
Y,false
OR
N,false
The html that is rendered in the original form looks like:
<input id="AgreeToRules" name="AgreeToRules" type="checkbox" value="true" />
<input name="AgreeToRules" type="hidden" value="false" />
During testing, I expected (and showed) the posted value to look like:
true,false
if checked or
false
if not checked. So where is the N and Y coming from?
I added user agent to the list of information returned from the error handler and it appears (so far) that all of the errors are occuring under windows XP with FF 3.0.10, but that’s exactly what I have tested with and the problem did not exist during testing.
Any thoughts?
Well I found the problem, and thought I’d post it here in case others encounter it. Certain form fillers will detect the fields using the names I’ve used and try to “fill them” automatically by setting the value to whatever the user has previously used for similarly named fields. Starting late last night, I’m also receiving “UNSUBSCRIBED” and “SUBSCRIBED” as values for a checkbox named “OptIn”.
So, the form filler changes the value of the checkbox to something and the user checks the box, resulting in the unexpected value being transmitted to the server.
Any thoughts on dealing with this would be appreciated.