ASP.NET MVC 2 DisplayFor ()
-
13-09-2019 - |
Domanda
Sto guardando la nuova versione di ASP.NET MVC (vedi qui per maggiori dettagli, se non avete visto già) e sto avendo qualche problema piuttosto semplice che visualizza il contenuto di un oggetto.
Nel mio controllo ho un oggetto di tipo Person
, che sto passando alla vista in ViewData.Model
. Tutto è bene finora e posso estrarre l'oggetto nella visualizzazione pronto per la visualizzazione. Quello che non capisco, però, è come ho bisogno di chiamare il metodo Html.DisplayFor()
al fine di ottenere i dati allo schermo. Ho provato quanto segue ...
<%
MVC2test.Models.Person p = ViewData.Model as MVC2test.Models.Person;
%>
// snip
<%= Html.DisplayFor(p => p) %>
, ma ottengo il seguente messaggio:
CS0136: Una variabile locale denominata 'p' non può essere dichiarato in questo ambito perché darebbe un significato diverso a 'p', che è già utilizzato in un 'genitore o corrente' ambito per indicare qualcosa di diverso
So che questo non è ciò che dovrei fare - So che ridefinire una variabile produrrà questo errore, ma non so come accedere all'oggetto dal controller. Quindi la mia domanda è: come faccio a passare l'oggetto alla vista, al fine di visualizzarne le proprietà?
NB. Dovrei aggiungere che sto leggendo su questo nel mio tempo libero limitato, quindi è del tutto possibile che ho perso qualcosa di fondamentale.
TIA
Soluzione
Html.DisplayFor
può essere utilizzato solo quando la vista è fortemente tipizzato-, e funziona sull'oggetto che è stato passato alla vista.
Quindi, per il vostro caso, è necessario dichiarare la tua vista con la Persona di tipo come il tipo di modello, (ad es something.something.View<Person>
) (scusate, non ricordo i nomi esatti, ma questo dovrebbe dare un senso), e poi quando si chiama Html.DisplayFor(p => p)
, p
prenderebbe il valore del valore del modello passato (persona) nella vista.
La speranza che avesse un senso.
Altri suggerimenti
p è già un nome di variabile; e nomi delle variabili devono essere univoci in tutta l'ambito corrente. Pertanto displayFor (p => p) non è valido, come si sta dichiarando un nuovo 'p' variabile lì. In questo modo il compilatore non sa wether di utilizzare il Person p, o la variabile (p =>).
Quindi, solo rinominarlo
<%= Html.DisplayFor(person => person) %>