Привязать CheckBox для bool? - PullRequest
       2

Привязать CheckBox для bool?

2 голосов
/ 16 февраля 2011

Как связать Nullable Bool с флажком в MVC 2. Я пытаюсь с этим кодом:

<%: Html.CheckBoxFor(model =>  model.Communication.Before)%>

Но покажи мне ошибку компиляции.

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

Ответы [ 3 ]

3 голосов
/ 16 февраля 2011

Я знаю об этой проблеме.Вы можете попробовать использовать этот обходной путь:

Создайте новое свойство с именем Before в вашем ViewModel:

public class YoursViewModel 
{
    public Communication Communication { get; set; }

    public bool Before
    {
        get
        {
            bool result;
            if (this.Communication.Before.HasValue)
            {
                result = (bool)this.Communication.Before.Value;
            }
            else
            {
                result = false;
            }

            return result;
        }
        set
        {
            this.Communication.Before = value;
        }
    }
}

Также вы должны быть осторожны со свойством Communication, это должно быть создано перед использованием.Например, когда вы инициализируете ViewModel в контроллере, вы также должны инициализировать это свойство.

ControllerAction()
{
  YoursViewModel model = ViewModelFactory.CreateViewModel<YoursViewModel >("");
  model.Communication = new Communication ();
  return View(model);
}

Спасибо Иван Баев

2 голосов
/ 16 февраля 2011

Флажок может иметь два состояния: ckecked / uncheked, true / false, 1/0. Поэтому попытка привязать флажок к свойству, которое потенциально может иметь три состояния, на самом деле не вписывается в картину. Я бы порекомендовал вам адаптировать модель представления так, чтобы она использовала ненулевое логическое свойство. Если в вашей доменной модели у вас есть логическое значение, которое нельзя изменить, вы можете сделать это на уровне отображения между вашей доменной моделью и моделью представления.

1 голос
/ 17 ноября 2017

Один из способов привязки Флажок в MVC View

Сначала, когда база данных EF, логическое (битовое) поле в базе данных генерирует пустое значение bool?Свойство в сгенерированном классе.Для демонстрации у меня есть таблица с именем Dude с полями

  • Идентификатор уникального идентификатора
  • Имя varchar (50)
  • IsAwesome bit

EF генерирует следующий класс:

namespace NullableEfDemo
{
 using System;
 public partial class Dude
 {
    public System.Guid Id { get; set; }
    public string Name { get; set; }
    public Nullable<bool> IsAwesome { get; set; }
 }
}

Чтобы иметь возможность привязать IsAwesome к флажку, я просто расширяю класс Dude.Это сделано для того, чтобы избежать редактирования сгенерированного класса, если мне нужно его обновить.Поэтому я добавил кодовый файл DudePartial.cs в свой проект (название не имеет значения).Не забудьте объявить или использовать пространство имен проекта:

namespace NullableEfDemo
{
 partial class Dude
 {
    public bool Awesome
    {
        get { return IsAwesome ?? false; }
        set { IsAwesome = value; }
    }
  }
}

Это объявляет новое свойство Awesome типа bool, которое можно привязать к флажку в представлении редактирования

@Html.CheckBoxFor(model => model.Awesome, new { @class = "control-label" })

В HttpPost я связываю свойство моделей Awesome вместо IsAwesome.

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include = "Id,Name,Awesome")] Dude dude)
    {…
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...