Строка не была идентифицирована как допустимая логическая строка - PullRequest
4 голосов
/ 01 декабря 2009

У меня есть страница, где я перечисляю чекбоксы с именами TimeRange1, TimeRange2 .... TimeRange7, и я генерирую их в цикле for следующим образом:

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

Работает нормально, пока я отправляю форму, затем получаю «Строка не была идентифицирована как допустимая логическая строка.»

Видимо, проблема в том, что я конкатенирую имя флажка.

Есть ли какой-нибудь аккуратный способ исправить это? Мне нужно, чтобы они назвали 1-7. Это как большой график, где вы выбираете, какое время должно быть доступно.

Ответы [ 3 ]

5 голосов
/ 01 декабря 2009

Попробуйте без помощников:

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

Помощники HTML получают свои значения из:

  1. ViewData.ModelState["controlName"].Value.RawValue.
  2. value параметр передан вспомогательному методу HTML.

Они также генерируют скрытое поле ввода в дополнение к флажку. Поэтому в зависимости от контекста иногда вы можете получить разметку, подобную этой:

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

и при публикации формы связыватель данных не сможет преобразовать значение в логический тип.

1 голос
/ 01 декабря 2009

Если вы не можете решить свою проблему с помощью Html.Checkbox, попробуйте альтернативный подход, предложенный в принятом ответе на этот вопрос: Как обрабатывать флажки в формах ASP.NET MVC?

0 голосов
/ 17 августа 2018

Дополнение к этому старому вопросу - может спасти кого-то от головной боли. Я случайно пометил свойство ViewBag тем же именем, что и свойство модели, и получил вышеупомянутое сообщение об ошибке (хотя при получении представления не публиковалось).

По сути, я установил следующее в контроллере:

ViewBag.TermsAndConditions = "blah blah blah"

и в моей модели у меня было:

public bool TermsAndConditions { get; set; }

Строка @Html.CheckBoxFor (m => m.TermsAndConditions) скинул и ошибка из вида.

Переименование либо свойства ViewBag, либо свойства модели, очевидно, исправило это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...