MVC - @ Html.CheckBoxFor - PullRequest
       0

MVC - @ Html.CheckBoxFor

2 голосов
/ 11 ноября 2011

Мне нужен флажок, но базовые данные имеют тип smallint в базе данных. Не уверен, как создать @ Html.Checkbox с этим типом данных. Он жалуется, говоря следующее:

Не удается неявно преобразовать тип 'short?' "bool"

Вот код, который у меня есть:

    @Html.CheckBoxFor(model => model.HasCycle)

Ответы [ 3 ]

3 голосов
/ 20 сентября 2012

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

Я занимаюсь разработкой нового приложения ASP.NET MVC на основе нашей существующей базы данных, поэтому мне нужно решить эту проблему.

Решение, которое я принял, состояло в том, чтобы создать не отображенное логическое свойство для преобразования из и в мое сопоставленное (smallint / short) свойство. Как следует:

public short AllowMailing { get; set; }

[NotMapped]
public bool AllowMailingBool
{
    get { return AllowMailing == 1? true : false; }
    set { AllowMailing = value ? (short)1 : (short)0; }
}

Работает нормально.

1 голос
/ 11 ноября 2011

Если вы храните логическое значение в базе данных, то вместо smallint следует использовать тип БД 'bit' (где 0 будет false, а 1 - true).

В противном случае вам необходимо сначала преобразовать модель. HasCycle в bool. Кроме того, так как это типа короткого? (Nullable), вам также нужно обрабатывать нулевые значения. Вы, вероятно, захотите обработать это в самой модели и публично представить HasCycle из модели как логическое, а не короткое. Тем не менее, вы можете столкнуться с некоторыми проблемами, идущими туда-сюда, и правильный способ сделать это - изменить тип базы данных.

конвертировать из короткого? для bool вы можете сделать что-то вроде:

bool hasCycleBool = false;   //if HasCycle is null, this will remain false
if(model.HasCycle != null)
{
    hasCycleBool = Convert.ToBoolean(model.HasCycle);
}
0 голосов
/ 11 ноября 2011

флажок является логическим значением, означающим true или false. если вы ожидаете истину / ложь (1,0), вам, вероятно, следует установить тип базы данных как bool. если вы не хотите этого делать, вам придется преобразовать значение int в bool (1,0)

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