MvcContrib CheckBoxList - PullRequest
       9

MvcContrib CheckBoxList

3 голосов
/ 10 мая 2010

Может быть, кто-то может объяснить это поведение:

Я использую CheckBoxList из последней версии MvcContrib Когда моя страница загружается в первый раз - я просто возвращаю свое представление

return View(Product.GetProduct(productId)); 

и все вроде бы хорошо.Все простые элементы управления html заполнены успешно, включая контрольный список:

<%= this.CheckBoxList(model => model.Product.Statuses)
    .Options(Model.Statuses, model => model.Id, model => model.Name)
    .ItemFormat("{0}<br />")
%>

Итак, у меня есть несколько кнопок в этой форме, например кнопка «Поиск» ().Я могу искать по productId и отображать его, если что-то было найдено.Таким образом, я передаю productId моему контроллеру, и этот контроллер возвращает вид так же, как в первый раз:

return View(Product.GetProduct(productId))

, если я использую ту же логику - все то же самое: то же представление, тот же контроллер, то же самое действие ... ничего нового.Но в этом случае я получил следующее сообщение об ошибке:

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

Сведения об исключении: System.FormatException: строка не была распознана как допустимое логическое значение.

Ошибка источника:

Line 268:                              <labe**strong text**l for="group<%=item.Value%>"><%=item.Text%></label><br />
Line 269:                          <% } %>--%>
Line 270:                          <%= this.CheckBoxList(model => model.Product.Statuses).Options(Model.Statuses, model => model.Id, model => model.Name).ItemFormat("{0}<br />")%>
Line 271:                        </div>
Line 272:                        </div>   

Я обнаружил, что при просмотрезагружается первый раз и после, если все флажки сняты, я нажимаю кнопку поиска - все идет хорошо, но когда какой-либо флажок установлен, я нажимаю кнопку поиска - я получаю эту ошибку.

Мне нужна помощь.Какие-нибудь яркие идеи?

1 Ответ

2 голосов
/ 19 ноября 2010

Я полагаю, что в CheckBoxList есть ошибка, так что при проверке списка требуется, чтобы значения для флажков были логическими преобразованными строками ("false", "true").

Итак, в вашем примере, если вы измените model => model.id на model => "true", вы увидите, что не получите ошибку:

 <%= this.CheckBoxList(model => model.Product.Statuses).Options(Model.Statuses, model => "true", model => model.Name).ItemFormat("{0}<br />")%>

Но это не то, что вы хотите. Мой обходной путь - удалить элемент для CheckBoxList (в вашем случае model.Product.Statuses) из ModelState, когда ModelState недопустим.

Вам нужно найти соответствующий ключ для model.Product.Statuses в ModelState и удалить его. Я использую следующий фрагмент для моего случая. Вам нужно поменять модель и свойство.

if (!ModelState.IsValid)
{    
  ModelState.Remove(PropertyHelper<EmailModel>.GetProperty(x => x.Attachments).Name);
  ...

Я использую форму PropertyHelper Как получить PropertyInfo определенного свойства?

Также я нахожу эту релевантную ссылку в трекере проблем mvccontrib: http://mvccontrib.codeplex.com/workitem/7071

...