2012-11-07 26 views
6

Ho il seguente po 'a mio avviso:HTML.TextBoxFor disabilitato valore non passa

@Html.TextBoxFor(model => model.PersonnelId, new { disabled = "disabled" }) 

Nel mio controller ho questo:

if (ModelState.IsValid) 
{ 
    PersonnelFacade.SavePerson(person); 
    return RedirectToAction("Index"); 
} 

Ora quando posso controllare il person.PersonnelId è vuoto. Quando rimuovo {disabled = "disabled"} funziona, ma poi posso cambiare PersonnelId che non è quello che voglio fare.

Cosa sto sbagliando?

+0

Si potrebbe utilizzare '' HiddenFor' + DisplayFor' invece, o semplicemente aggiungere 'HiddenFor' a quello che già avete. Ad ogni modo, non ha senso affidarsi a questo tipo di protezione a livello di browser. Chiunque può inviare una query POST falsificata con "PersonnelID" modificato in quello che desidera. – GSerg

+0

Nessuno di questi offre la stessa funzionalità di una casella di testo disabilitata? – Liam

+0

Nel mio esempio lo sto usando con PersonnelId. Ma voglio usare lo stesso per CreationDate, in modo che gli utenti possano vedere quando la persona è stata creata o ModificationDate da mostrare quando è stata effettuata l'ultima modifica. DisplayFor non trasmette il valore. L'HiddenFor, posso usare per PersonnelId, dal momento che in realtà non dovresti vederlo. Ma non posso usarlo per CreationDate o ModificationDate, poiché dovrebbero essere visualizzati. –

risposta

5

Provare a farlo in sola lettura.

@Html.TextBoxFor(model => model.PersonnelId, new { readonly= "readonly" }) 
+1

Il "readonly" funziona bene, tranne che la casella di testo è ancora abilitata. Quando aggiungo il "disabilitato", perde di nuovo il valore. –

9

Prova 2 valori

  1. PersonnelIdForDisplay
  2. PersonnelId

Poi sulla vostra vista

  1. @ Html.TextBoxFor (modello => model.PersonnelIdForDisplay, nuova {disabled = "disabled"})
  2. @ Html.HiddenFor (p => p.PersonnelId)
+0

grazie .. è diventato utile per me .. –

Problemi correlati