2013-06-07 14 views
6

Sto utilizzando MVC4 e Razor e desidera determinare il tipo di modello da una vista. Questo dovrebbe essere facile ma non sono abbastanza in grado di ottenere la sintassi corretta.Ottieni il tipo di modello in MVC Visualizza

Voglio fare questo in modo condizionale è possibile visualizzare marcatura diversa all'interno della pagina _Layout.cshtml a seconda della vista corrente e il modello che è utilizzato in

Deve essere (credo) qualcosa lungo le linee di.:

@if (Model.GetType() == Web.Models.AccommodationModel) { // Obviously not correct 
     <h1>Accomodation markup here</h1> 
} 

Qualsiasi suggerimento molto apprezzato!

risposta

12

è possibile utilizzare la parola chiave is:

@if (Model is Web.Models.AccommodationModel) { 
    <h1>Accomodation markup here</h1> 
} 

o anche (brutta):

@if (Model.GetType() == typeof(Web.Models.AccommodationModel)) { 
    <h1>Accomodation markup here</h1> 
} 
+0

Grazie ragazzi, e solo per salvare la faccia, sono * sicuro * Ho provato il secondo metodo che hai suggerito sopra e non ha funzionato. Ora ho provato di nuovo e funziona! Deve essere stato un errore di battitura o qualcosa del genere. Comunque grazie v molto. – WheretheresaWill

4

Anche se avete già una risposta che si suggerisco di ripensare l'intero concetto.

Quello che stai facendo qui è accoppiare il layout generico con alcune viste particolari. Quelle visualizzazioni possono cambiare in futuro, richiedendo di cambiare il layout, ci possono essere sempre più di loro o alcuni potrebbero essere cancellati. Quindi il tuo approccio si rompe Principio di Responsabilità Unica: ci sono ovviamente più motivi per cambiare _layout.cshtml.

Che ne dici di inserire un @section SomeSection { <h1>markup</h1> } in viste che richiedono tale codice aggiuntivo e lo si esegue nel layout utilizzando @RenderSection("SomeSection"), magari anche con il controllo @if(IsSectionDefined("SomeSection")) nel luogo desiderato?

+0

Sì, giusto punto. Daremo un'occhiata anche a questo metodo. Era più per una soluzione rapida per il contenuto di una modal tenuta in '_Layout', ma comunque un buon punto - grazie. – WheretheresaWill

Problemi correlati