2015-11-15 5 views
16

Dal lato server, ho definito un nuovo valore booleano e lo ho impostato nel tag <input>, ma il browser non è stato in grado di rilevarlo.Perché <input type = "hidden"> non può accettare un valore booleano dal lato server?

@{ var isAuthor = false; } 
<input type="hidden" value="@isAuthor" /> 

Dopo la compilazione, il risultato è stato: <input type="hidden"></input>

Ma, quando ho cercato di convertire isAuthor ad un string, dovrebbe funzionare:

@{ var isAuthor = false; } 
<input type="hidden" value="@isAuthor.ToString()" /> 

Risultato: <input type="hidden" value="false"></input>

Perché ? Ho dimenticato qualcosa?

+1

_Did si dimentica something_ - No. E 'solo il modo in cui funziona il motore di rasoio. Se il valore di un attributo è 'null' o' false', non è reso - se hai aggiunto 'name =" @ isAuthor "' non verrebbe visualizzato né –

+0

Puoi anche usare '@ Html.Hidden()', non nasconderà il valore se è falso. –

risposta

19

Questa è una funzione del motore di visualizzazione Razor denominata attributi condizionali. L'idea è di semplificare lo scenario, dove vuoi o non vuoi rendere l'attributo basato sul valore. In precedenza dovevi scrivere l'istruzione if o utilizzare l'operatore ternario per gestirlo, ma con gli attributi condizionali è tutto molto semplificato.

Con attributi condizionali, se il valore di un attributo è null o false, l'attributo è non fusi. Se vuoi che il valore sia false devi eseguirlo nella stringa, proprio come hai fatto tu nella domanda.

Si può leggere un grande introduzione per Razor condizionale attributi in questo blog article

+0

Grazie. Questo è l'aiuto :) –

Problemi correlati