Risposte:
Crea un input nascosto nel modulo per il campo (dal tuo modello) che lo passi.
È utile per i campi nel tuo Model / ViewModel che devi persistere nella pagina e sono passati indietro quando viene effettuata un'altra chiamata ma non dovrebbero essere visti dall'utente.
Considera la seguente classe ViewModel:
public class ViewModel
{
public string Value { get; set; }
public int Id { get; set; }
}
Ora vuoi che la pagina di modifica memorizzi l'ID ma non venga visualizzato:
<% using(Html.BeginForm() { %>
<%= Html.HiddenFor(model.Id) %><br />
<%= Html.TextBoxFor(model.Value) %>
<% } %>
Ciò risulta nell'equivalente del seguente HTML:
<form name="form1">
<input type="hidden" name="Id">2</input>
<input type="text" name="Value" value="Some Text" />
</form>
E per utilizzare nuovamente l'input dell'ID nascosto nel metodo di azione Modifica:
[HttpPost]
public ActionResult Edit(FormCollection collection)
{
ViewModel.ID = Convert.ToInt32(collection["ID"]);
}
Come molte funzioni, questa può essere utilizzata in molti modi diversi per risolvere molti problemi diversi, penso che sia ancora un altro strumento nelle nostre cinture degli strumenti.
Finora, la discussione si è concentrata molto sul semplice nascondere un ID, ma questo è solo un valore, perché non usarlo per molti valori! Questo è quello che sto facendo, lo uso per caricare i valori in una classe solo una vista alla volta, perché html.beginform crea un nuovo oggetto e se il tuo oggetto modello per quella vista aveva già alcuni valori passati, quelli i valori andranno persi a meno che non si fornisca un riferimento a tali valori nel modulo iniziale.
Per vedere una grande motivazione per html.hiddenfor, ti consiglio di vedere Passaggio di dati da una vista a un controller in .NET MVC - "@model" non evidenziato
L'utilizzo del codice Razor @ Html.Hidden o @ Html.HiddenFor è simile al seguente codice Html
<input type="hidden"/>
E fai riferimento anche al seguente link