2013-07-30 10 views
6

Sono nuovo ad asp.net mvc4 e c'è qualcosa che non capisco bene.Dichiarazione del modello in Razor View in mvc4 asp.net

Perché devo dichiarare il modello utilizzando @model nella parte superiore della vista, se ho già passato un oggetto alla vista nel controller.

Prendendo un esempio:

Controller:

public ActionResult countryDetails(int id) 
    { 

     Country country = db.Country.Find(id); 
     return View(country); 

    } 

Vista:

@model MvcApplication2.Models.Country 
@{ 
    ViewBag.Title = "countryDetails"; 
} 
... 

Il controller restituisce un View con un oggetto come parametro, in modo che il modello dovrebbe essere già noto. Mi dispiace se è ovvio, ma non riesco a capire perché questa non sia una dichiarazione "doppia".

Grazie per il vostro aiuto!

risposta

1

Il motivo principale è il tipo di sicurezza, permette di lavorare con una vista fortemente tipizzati con il beneficio di intellisense, suggerimenti di errore del compilatore, fusione non valida ecc

Inoltre, un altro motivo è per la leggibilità - agisce come un promemoria sul tipo di modello con cui si sta effettivamente trattando invece di dover continuare a riferirsi al controller.

6

La dichiarazione in alto farà due cose per voi:

  • Permetterà Intellisence sapere che tipo si utilizza quando si digita in @Model o utilizzare una delle estensioni helper HTML.

  • Controllerà anche in fase di esecuzione che il modello passato può essere convertito nel tipo che la vista si aspetta.

sua non necessariamente un "doppio dichiarazione", come è analogo a specificare un tipo di un parametro di un metodo. Come così

Person Someone = new Person(); 
RenderView(Someone); 
... 
void RenderView(Person model) { } 
+0

Grazie per le tue risposte. Ho capito ora :) – Pierrito

2

Per impostazione predefinita la visualizzazione eredita da System.Web.Mvc.WebViewPage<TModel>

Opzionalmente si può ignorare questa classe, è il meccanismo di ereditarietà ASP.NET predefinita:

@inherits System.Web.Mvc.WebViewPage<List<CompanyName.MyProduct.MyCategory>> 

Oppure si può semplicemente semplificare questo dal MVC3 così:

@model List<CompanyName.MyProduct.MyCategory> 

Questa sintassi dello zucchero era fatto per semplificare la digitazione del codice. Questa dichiarazione darvi alcune cose

  1. View cacciate automaticamente oggetto al tipo preferito
  2. Riceverai tipo definito 'modello' di proprietà che consente di accedere ai vostri metodi e le proprietà
oggetto

Basti pensare che questo è un metodo che accetta l'oggetto e lo trasmette al tipo specificato che fornisci

Problemi correlati