2012-03-28 11 views
9

... prima di tutto, lo sto facendo solo per curiosità. Niente un'applicazione reale qui, ma solo per la conoscenza e armeggiare su ...È un ASPC MVC Visualizza una "classe"?

ASP.NET Visualizzazioni avere immobili come Model e ViewData e ha anche metodi pure.

È anche possibile utilizzare @Using proprio come un normale file class.cs.

so che è di tipo WebPageView<TModel>

La mia domanda principale è: è una classe?

Dovrebbe essere, perché è un tipo, ma ..

dovrei essere in grado di fare anche questo allora (engine Razor):

@{ 
    public class Person 
    { 
     //etc... 
    } 

    var p = new Person(); 
} 

<span>@p.Name</span> 

Tuttavia non posso. . perché?

nota: attualmente un C#, principiante di ASP.net.

+1

È [ora open source] (http://weblogs.asp.net/scottgu/archive/2012/03/27/asp-net-mvc-web-api-razor-and-open-source.aspx) così puoi ora [scoprire direttamente] (http://aspnetwebstack.codeplex.com/)! –

+1

La risposta tecnica è che il codice della vista viene inserito in un corpo del metodo. E non puoi mettere le lezioni lì. Ma perché vuoi definire le classi in una vista? Sembra discutibile. – CodesInChaos

+0

@dtryon fantastico !! grazie per la buona notizia :) –

risposta

5

Non puoi farlo perché Razor markup viene compilato in una sequenza di istruzioni all'interno di un metodoall'interno della classe generata derivata da WebViewPage o WebViewPage <tModel>

La domanda più importante, però, è il motivo per vorresti farlo? Preferiamo invece tenere Razor libero da questo tipo di logica: il suo compito dovrebbe essere quello di produrre layout, non fare alcun tipo di logica aziendale o trasformazione dei dati aziendali. Esegui tutto il lavoro pesante nel tuo metodo di azione e consegna un Modello che descriva i dati richiesti per il rendering del layout in un formato che richiede l'elaborazione di un semplice markup del rasoio.

Ci sono un paio di tutorial su un round che descrivono come avvicinarsi a MVC e Razor. Ho trovato questo breve, ma fa un lavoro ragionevole di coprire una storia end-to-end che potrebbe aiutarti a ottenere l'idea. Comprende l'uso di EF per ottenere anche dati che potrebbero essere più di quanto si trattasse, ma vale la pena leggere per vedere come un'intera architettura è appesa insieme: http://weblogs.asp.net/shijuvarghese/archive/2011/01/06/developing-web-apps-using-asp-net-mvc-3-razor-and-ef-code-first-part-1.aspx

5

Sì, Le viste sono classi. Sono compilati in un assembly temporaneo (quindi non hanno accesso ai membri interni dell'assembly principale, il che è utile quando si ha a che fare con tipi dinamici/anonimi).

Penso che il Rasoio abbia una regola che non consente di dichiarare le classi interne, non ha controllato.

11

Certo, è necessario utilizzare la parola chiave functions al fine di scendere fino a esporre le cose a livello di classe come i campi, le proprietà, i metodi e tipi interne:

@functions { 
    public class Person 
    { 
     public string Name { get; set; } 
    } 
} 

@{ 
    var p = new Person(); 
} 

<span>@p.Name</span> 

Questo funzionerà bene.

Detto questo, tenere presente che l'unico scopo di queste classi interne è se è necessario definire un tipo solo per l'uso all'interno di una vista. Io stesso, non ho mai trovato la necessità di farlo per le lezioni.Tuttavia, ho approfittato di questa tecnica per aggiungere nuovi metodi non sintatticamente possibili con i metodi helper.

+0

whoa! mai visto prima la parola chiave 'functions'. Compilare! grazie :) –

+4

@JanCarloViray Si prega di considerare di cambiare la risposta selezionata a questa. – CodeAngry

+1

@ JanCarloViray si prega di notare il suggerimento di CodeAngry. –

Problemi correlati