Buon giorno a tutti.

Volevo postare la soluzione di un problema molto diffuso in rete per il quale, ad oggi, nessuno ha ancora dato una risposta.

Immaginate di avere un campo nel vostro DB definito come
codice:
emailEnabled bit NULL
Questo campo può avere 3 valori: true, false e null.

Di conseguenza, se posto in un modello, all'interno della View il comando:
codice:
<%: Html.CheckBoxFor(model => model.emailEnabled)%>
restituisce un errore relativo al fatto che non si può castare un bool? in bool.

La soluzione più veloce è quella di cambiare il campo nel db e renderlo NOT NULL, ma quando questo non si può fare...



SOLUZIONE:
Aggiungere una proprietà di tipo bool al modello che "aggiusti" emailEnabled in modo che non sia mai null ed usare questa.
codice:
  [MetadataType(typeof(ModelloMD))]
  public partial class Modello
  {

    [DisplayName("E-Mail abilitata")]
    public bool enableMail { // campo aggiunto da me
      get { return flgEmailEnabled ?? false; }  // se null restituisce false
      set { emailEnabled = value; } // setta true o false il valore di emailEnabled
    }

    private class ModelloMD  // Buddy Class
    {
      [DisplayName("E-Mail abilitata")]  // campo del db
      public bool? emailEnabled { get; set; }
    }
  }
e la chiamata alla checkbox nella View diventa:
codice:
<%: Html.CheckBoxFor(model => model.enableMail)%>
Spero che l'esempio sia chiaro.
Buona programmazione a tutti