Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [RISOLTO] Asp.Net MVC2-Visualizzazione checkbox per un campo booleano nullable(bool?)

    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
    Il cinghiale è un animale raffinato

  2. #2
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Ma è "logicamente" sbagliato secondo me gestirlo in questo modo.

    Se ho un valore bool? significa che mi interessa anche il valore null.
    Ad esempio se l'utente non lo sa, non vuole inserirlo e quindi non inserisce l'informazione.

    Non c'è soluzione, non si può utilizzare una checkbox direttamente.

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da URANIO
    Ma è "logicamente" sbagliato secondo me gestirlo in questo modo.

    Se ho un valore bool? significa che mi interessa anche il valore null.
    Ad esempio se l'utente non lo sa, non vuole inserirlo e quindi non inserisce l'informazione.

    Non c'è soluzione, non si può utilizzare una checkbox direttamente.
    Concordo! se l'informazione può essere: vero-falso-non so, e voglio mantenere le tre possibilità, basta usare tre radio, oppure una select con le tre possibilità; oppure ancora si può costruire un checkbox tipo quello di Access: grigio->non so, bianco->no, con la crocetta->sì

    è poi utile avere una classe (o una struttura) di supporto che simuli un booleano nullable

    Insomma, queste soluzioni ci sono sin dal momento dell'uscita dei valori nullable (framework 2, credo)

    Pietro

  4. #4
    Io sto parlando (vedi titolo) di ASP.NET MVC2, uscito col Framework 4 . La struttura che "simuli un booleano nullable" esiste ed è il tipo 'bool?'.

    Ho dimenticato di specificare che la mia soluzione va applicata se si vuole cambiare il comportamento di un campo BIT NULLABLE in BIT NOT NULL senza modificare il database.


    In tal caso il metodo Html.CheckBoxFor() non funziona e per crearla è necessario modificare il modello della pagina.
    Semplici cast come questi:
    codice:
    Html.CheckBoxFor(model => (bool)model.emailEnabled);
    
    o
    
    Html.CheckBoxFor(model => model.emailEnabled ?? false)
    non funzionano perché il tipo non è 'bool' ma 'bool?' .


    _________________________________________


    Nel caso in cui si volessero mantenere i tre valori è possibile piazzare i 3 radio button come avete già detto oppure creare una DropDownList con i valori "Sì", "No", "Non so".

    Il cinghiale è un animale raffinato

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    non ho letto MVC2, me ne scuso
    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.