Действие контроллера с несколькими параметрами

Я пытаюсь понять, что я думаю является проблемой привязки модели в моем проекте ASP.NET Core. У меня есть следующее действие контроллера Index:

[HttpGet]
public async Task<IActionResult> Index(SortFilterIndexOptions options) { ... }

SortFilterIndexOptions - это четыре члена, определенные в следующем классе:

public class SortFilterIndexOptions
{
    public int SelectedBirdId { get; set; }
    public bool ShowAll { get; set; }
    public bool ShowInTable { get; set; }
    public int page { get; set; }
}

Это позволяет пользователю фильтровать страницу с постраничным индексом. Члены bool связаны с элементами управления флажками.

У меня есть ошибка, если член bool ShowAll изменяется на TRUE, а затем я пытаюсь перейти на другую страницу. Как показано на скриншоте ниже, часть URL-адреса с параметром ShowAll содержит два логических значения (ShowAll = true, false):

введите описание изображения здесь

что, конечно же, приводит к ошибке синтаксического анализа («FormatException: String не распознается как допустимое логическое значение»).

Что тут происходит? Это происходит только тогда, когда для параметра ShowAll установлено значение TRUE. Это проблема маршрутизации, потому что она не соответствует шаблону маршрута по умолчанию? Или это проблема с ModelBinder? Я просто пытаюсь понять, что происходит, чтобы принять правильные меры. Любая помощь будет оценена ...

Обновить

Теперь это проблема # 3246 ('Ошибка привязки модели с логическими значениями') в asp / Домашний репозиторий GitHub (первоначально мной поднятый как проблема # 1711 в dotnet / Core репозиторий).


person Winthorpe    schedule 16.05.2018    source источник
comment
Сообщение об ошибке довольно ясное ..._ 1_ недопустимо как логическое. Должно работать только с ShowAll=true   -  person Nkosi    schedule 16.05.2018
comment
Это флажок в форме, отправляемой через GET?   -  person CodeCaster    schedule 16.05.2018
comment
Да, я пытаюсь понять, почему он добавляет два логических значения. Когда я нажимаю кнопку следующей страницы. Это случается, ShowAll переключается на true. Почему в URL добавляется второе значение false?   -  person Winthorpe    schedule 16.05.2018
comment
@CodeCaster. Это элемент управления Bootstrap Toggle. То же, что и флажок. В форме для GET   -  person Winthorpe    schedule 16.05.2018


Ответы (2)


Сообщение об ошибке довольно ясное ..._ 1_ недопустимо как логическое значение.

Связыватель модели получает следующую строку "true,false" из строки запроса для этого параметра и затем пытается проанализировать ее как логическое значение, что, как вы уже видели, завершится ошибкой.

Похоже на попытку

bool value = bool.Parse("true,false");

Должно работать только с ShowAll=true

person Nkosi    schedule 16.05.2018
comment
@CodeCaster Теперь мне интересно, есть ли у связывателя модели в ядре такую ​​возможность? - person Nkosi; 16.05.2018
comment
Я знаю, что ядро ​​любит ломать много вещей, но что-то столь же фундаментальное, как флажок в форме ...? - person CodeCaster; 16.05.2018
comment
Да, это кажется странным. Я перейду к раскрывающемуся списку перечисленных значений и посмотрю, работает ли он. Чтобы попытаться увидеть, является ли ошибка изолированной от флажка ... Как я уже упоминал, можно перемещаться по разным страницам, где флажки оставлены как ложные. Он ломается при переключении на истину ... - person Winthorpe; 16.05.2018
comment
Я заменил флажки раскрывающимися списками, и проблема с привязкой модели была решена. Это предполагает, что проблема была вызвана ModelBinder с флажками. Я ненадолго оставлю вопрос открытым, чтобы посмотреть, сможет ли кто что-нибудь добавить ... - person Winthorpe; 16.05.2018

Эта проблема была исследована группой aspnet / Mvc, занимавшейся проблемой # 8043.

С ModelBinder проблем нет. Проблема была вызвана моим кодом пейджера, который создает URL-адрес. Воспользуйтесь ссылкой, чтобы просмотреть всю беседу, которая содержит подробное объяснение из aspnet / Команда MVC и пример кода предоставлены мной.

person Winthorpe    schedule 13.07.2018