4

I have a page where I list checkboxes named TimeRange1, TimeRange2.... TimeRange7, and I generate them in a for loop like this:

<% for (int currentDay = 1; currentDay <= 7; currentDay++)
......<%= Html.CheckBox("TimeRange" + currentDay.ToString(), false)%>

Works fine til I post the form, then I get a "The string was not identified as a valid Boolean string."

Apparently the problem is that I concatenate the name of the checkbox.

Is there some neat way of fixing this? I need to have them named 1-7. It's like a big schedule where you select which times should be available.

BenMorel
  • 34,448
  • 50
  • 182
  • 322
Lasse Edsvik
  • 9,070
  • 16
  • 73
  • 109

2 Answers2

5

Try without helpers:

<% for (int currentDay = 1; currentDay <= 7; currentDay++) { %>
    <input type="checkbox" name="TimeRange<%= currentDay.ToString() %>" />
<% } %>

Html Helpers get their values from :

  1. ViewData.ModelState["controlName"].Value.RawValue.
  2. value parameter passed to HTML helper method.

They also generate a hidden input field in addition to the checkbox. So depending on the context sometimes you may end up with markup like this:

<input type="checkbox" name="TimeRange1" value="SomeValue, false" />

and when you post the form the data binder will be unable to convert the value to a boolean type.

Darin Dimitrov
  • 1,023,142
  • 271
  • 3,287
  • 2,928
0

An addition to this ol' question - might save someone a headache. I had accidentally labeled a ViewBag property to the same name as a model property, and got the above mentioned error message (when getting the view though, not posting).

In essence I had set the following in the controller:

ViewBag.TermsAndConditions = "blah blah blah"

and in my model I had:

public bool TermsAndConditions { get; set; }

The line @Html.CheckBoxFor(m => m.TermsAndConditions) threw and error from the view.

Renaming either the ViewBag or model property fixed it, obviously.

Mackan
  • 6,200
  • 2
  • 25
  • 45