Agarwal1984 Ответов: 4

Не может неявно преобразовать тип 'bool? - В "бул". Существует явное преобразование (вы пропускаете приведение? ) В MVC?


Привет,

не может неявно преобразовать тип 'bool?' в 'bool'. Существует явное преобразование (отсутствует приведение?) в MVC.

Я пытаюсь установить флажок в своем приложении mvc, но он получает ошибку.

@формат HTML.CheckBoxFor (x => x.IsSelected) ошибка в "IsSelected".

Пожалуйста, помогите мне.

заранее спасибо.

Анкит Агарвал
инженер-программист

Что я уже пробовал:

[HttpPost]
        public string Index(IEnumerable<City> cities)
        {
            if (cities.Count(x => x.IsSelected) == 0)
            {
                return "You didn't select any city";
            }
            else
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("You selected -");
                foreach (City city in cities)
                {
                    if (city.IsSelected)
                    {
                        sb.Append(city.Name + ",");
                    }
                }
                sb.Remove(sb.ToString().LastIndexOf(","), 1);
                return sb.ToString();
            }
        }



@формат HTML.CheckBoxFor(x => x. IsSelected)

F-ES Sitecore

Если IsSelected-это модель, предназначенная для сопоставления с флажком, то она должна быть определена как "bool", а не" bool?", поскольку флажок имеет только два состояния, а не три. Если возможно, измените определение IsSelected.

4 Ответов

Рейтинг:
2

Richard Deeming

Если вы не можете изменить свойство модели с bool? к bool, тогда вам придется использовать CheckBox и LabelFor методы, а не CheckBoxFor метод:

@Html.CheckBox(nameof(Model.IsSelected), Model.IsSelected ?? false)
@Html.LabelFor(m => m.IsSelected)

В качестве альтернативы вы можете использовать EditorFor с помощью пользовательского редактора, как описано в этот ответ StackOverflow[^].

Или вы можете добавить ненулевое свойство оболочки в свою viewmodel и использовать его вместе с CheckBoxFor метод:
public bool IsSelectedNotNull
{
    get { return IsSelected ?? false; }
    set { IsSelected = value; }
}
@Html.CheckBoxFor(m => m.IsSelectedNotNull)


Рейтинг:
2

Philippe Mori

Обычно я изменяю модель представления, и если единственная цель модели представления - быть моделью для этого представления, вы всегда можете ее изменить.

В качестве альтернативы, если бы у меня было много случаев, когда я предпочитаю иметь bool ? для свойства и все еще есть флажок, я бы, вероятно, написал метод расширения, который будет обрабатывать этот случай.

Однако для этого требуется хорошее понимание C#, поскольку деревья выражений несколько необычны...


Рейтинг:
0

#realJSOP

Сделать это:

if (cities.Count(x => x.IsSelected == true) == 0)


Richard Deeming

Вы забегаете слишком далеко вперед - вы ответили на его вопрос. следующий вопрос! :Д

И тот, что последует за этим, вероятно, будет о if (city.IsSelected) линия.

#realJSOP

Я стараюсь ответить на как можно больше вопросов одним ответом.

Рейтинг:
0

Mohamed Rafiq K

Попробуй с этим

@Html.CheckBoxFor(x => x.IsSelected.GetValueOrDefault())


Richard Deeming

Это приведет к InvalidOperationException с сообщением "Шаблоны можно использовать только с доступом к полю, доступом к свойствам, индексом одномерного массива или однопараметрическими пользовательскими выражениями индексатора".