Aggiunta di una visualizzazione (VB)

di Rick Anderson

Questa esercitazione illustra le nozioni di base per la creazione di un'applicazione Web MVC ASP.NET con Microsoft Visual Web Developer 2010 Express Service Pack 1, una versione gratuita di Microsoft Visual Studio. Prima di iniziare, assicurarsi di aver installato i prerequisiti elencati di seguito. È possibile installarli facendo clic sul collegamento seguente: Installazione guidata piattaforma Web. In alternativa, è possibile installare singolarmente i prerequisiti usando i collegamenti seguenti:

Se si usa Visual Studio 2010 anziché Visual Web Developer 2010, installare i prerequisiti facendo clic sul collegamento seguente: Prerequisiti di Visual Studio 2010.

Per questo argomento è disponibile un progetto visual Web Developer con VB.NET codice sorgente. Scaricare la versione VB.NET. Se si preferisce C#, passare alla versione C# di questa esercitazione.

In questa sezione si modificherà la HelloWorldController classe per usare un file modello di visualizzazione per incapsulare il processo di generazione di risposte HTML a un client.

Si inizierà usando un modello di visualizzazione con il Index metodo nella HelloWorldController classe . Attualmente il Index metodo restituisce una stringa con un messaggio hardcoded all'interno della classe controller. Modificare il Index metodo per restituire un View oggetto , come illustrato di seguito:

Public Function Index() As ActionResult
            Return View()
        End Function

Aggiungere ora un modello di visualizzazione al progetto che è possibile richiamare con il Index metodo . A tale scopo, fare clic con il pulsante destro del mouse all'interno del Index metodo e scegliere Aggiungi visualizzazione.

IndexAddView

Verrà visualizzata la finestra di dialogo Aggiungi visualizzazione . Lasciare le voci predefinite e fare clic sul pulsante Aggiungi .

3addView

Vengono creati la cartella MvcMovie\Views\HelloWorld e il file MvcMovie\Views\HelloWorld\Index.vbhtml . È possibile visualizzarli in Esplora soluzioni:

SolnExpHelloWorldIndx

Aggiungere codice HTML sotto il <h2> tag . Il file MvcMovie\Views\HelloWorld\Index.vbhtml modificato è illustrato di seguito.

@Code
    ViewData("Title") = "Index"
End Code

<h2>Index</h2>

<b>Hello</b> World!

Eseguire l'applicazione e passare al controller "hello world" (http://localhost:xxxx/HelloWorld). Il Index metodo nel controller non ha funzionato molto. È stata semplicemente eseguita l'istruzione return View(), che indicava che si voleva usare un file modello di visualizzazione per eseguire il rendering di una risposta al client. Poiché non è stato specificato in modo esplicito il nome del file modello di visualizzazione da usare, ASP.NET MVC ha usato il file di visualizzazione Index.vbhtml all'interno della cartella \Views\HelloWorld . L'immagine seguente mostra la stringa hardcoded nella visualizzazione.

3HelloWorld

Sembra abbastanza buono. Si noti tuttavia che la barra del titolo del browser indica "Index" e il titolo grande nella pagina indica "My MVC Application". Cambiamo quelli.

Modifica delle viste e delle pagine di layout

Prima di tutto, modificare il testo "My MVC Application". Il testo viene condiviso e visualizzato in ogni pagina. Viene effettivamente visualizzato in un'unica posizione nel progetto, anche se si trova in ogni pagina dell'applicazione. Passare alla cartella /Views/Shared in Esplora soluzioni e aprire il file _Layout.vbhtml. Questo file è denominato pagina di layout ed è la "shell" condivisa usata da tutte le altre pagine.

Si noti la @RenderBody() riga di codice nella parte inferiore del file. RenderBody è un segnaposto in cui tutte le pagine create vengono visualizzate, "incapsulate" nella pagina di layout. Modificare l'intestazione <h1> da " My MVC Application" (Applicazione MVC) a "MVC Movie App".

<div id="title">
        <h1>MVC Movie App</h1>
  </div>

Eseguire l'applicazione e prendere nota che ora indica "MVC Movie App". Fare clic sul collegamento Informazioni e anche questa pagina mostra "MVC Movie App".

Di seguito è riportato il file _Layout.vbhtml completo:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>@ViewData("Title")</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>
</head>
<body>
    <div class="page">
        <header>
            <div id="title">
                <h1>MVC Movie App</h1>
            </div>
            <div id="logindisplay">
                @Html.Partial("_LogOnPartial")
            </div>
            <nav>
                <ul id="menu">
                    <li>@Html.ActionLink("Home", "Index", "HelloWorld")</li>
                    <li>@Html.ActionLink("About", "About", "Home")</li>
                </ul>
            </nav>
        </header>
        <section id="main">
            @RenderBody()
        </section>
        <footer>
        </footer>
    </div>
</body>
</html>

A questo punto, modificare il titolo della pagina Indice (visualizzazione).

@Code
    ViewData("Title") = "Movie List"
End Code

<h2>My Movie List</h2>

<p>Hello from our View Template!</p>

Aprire MvcMovie\Views\HelloWorld\Index.vbhtml. Esistono due posizioni per apportare una modifica: prima, il testo visualizzato nel titolo del browser e quindi nell'intestazione secondaria (l'elemento <h2> ). Le modifiche verranno leggermente diverse, in modo da poter vedere quale parte dell'app modifica il bit di codice.

Eseguire l'applicazione e passare ahttp://localhost:xx/HelloWorld. Si noti che il titolo del browser, l'intestazione primaria e le intestazioni secondarie sono cambiati. È facile apportare modifiche importanti nell'applicazione con piccole modifiche a una visualizzazione. Se non vengono visualizzate modifiche nel browser, è possibile visualizzare il contenuto memorizzato nella cache. Premere CTRL+F5 nel browser per forzare il caricamento della risposta dal server.

3_MyMovieList 3_MyMovieList

Il nostro piccolo "dati" (in questo caso il messaggio "Hello World!" è hardcoded, tuttavia. L'applicazione MVC ha V (visualizzazioni) e abbiamo ancora C (controller), ma non M (modello). A breve verrà illustrato come creare un database e recuperare i dati del modello da esso.

Passaggio di dati dal controller alla vista

Prima di passare a un database e parlare dei modelli, si parlerà prima di tutto del passaggio di informazioni dal controller a una visualizzazione. Si vuole passare il modello di visualizzazione necessario per eseguire il rendering di una risposta HTML a un client. Questi oggetti vengono in genere creati e passati da una classe controller a un modello di visualizzazione e devono contenere solo i dati richiesti dal modello di visualizzazione e non più.

In precedenza con la HelloWorldController classe , il Welcome metodo di azione ha preso e name un numTimes parametro e quindi restituisce i valori dei parametri nel browser. Invece di fare in modo che il controller continui a eseguire direttamente il rendering di questa risposta, i dati verranno inseriti in un contenitore per la visualizzazione. I controller e le visualizzazioni possono utilizzare un ViewBag oggetto per contenere tali dati. Che verrà passato automaticamente a un modello di visualizzazione e usato per eseguire il rendering della risposta HTML usando il contenuto del contenitore come dati. In questo modo il controller riguarda un elemento e il modello di visualizzazione con un altro, consentendo di mantenere la "separazione pulita delle preoccupazioni" all'interno dell'applicazione.

In alternativa, è possibile definire una classe personalizzata, quindi creare un'istanza di tale oggetto autonomamente, compilarla con i dati e passarla alla visualizzazione. Questa operazione è spesso denominata ViewModel, perché si tratta di un modello personalizzato per la visualizzazione. Per piccole quantità di dati, tuttavia, ViewBag funziona perfettamente.

Tornare al file HelloWorldController.vb per modificare il Welcome metodo all'interno del controller per inserire Message e NumTimes in ViewBag. ViewBag è un oggetto dinamico. Ciò significa che puoi mettere tutto ciò che vuoi in esso. ViewBag non ha proprietà definite fino a quando non si inserisce qualcosa all'interno di esso.

Oggetto completo HelloWorldController.vb della nuova classe nello stesso file.

Namespace MvcMovie
    Public Class HelloWorldController
        Inherits System.Web.Mvc.Controller
        '
        ' GET: /HelloWorld

        Function Index() As ActionResult
            Return View()
        End Function

        Public Function Welcome(ByVal name As String, Optional ByVal numTimes As Integer = 1) As ActionResult
            ViewBag.Message = "Hello " & name
            ViewBag.NumTimes = numTimes
            Return View()
        End Function

    End Class
End Namespace

Ora viewBag contiene i dati che verranno passati automaticamente alla visualizzazione. Anche in questo caso, in alternativa, avremmo potuto passare il nostro oggetto come questo se ci piacesse:

return View(myCustomObject)

A questo momento è necessario un WelcomeView modello. Eseguire l'applicazione in modo che il nuovo codice venga compilato. Chiudere il browser, fare clic con il pulsante destro del mouse all'interno del Welcome metodo e quindi scegliere Aggiungi visualizzazione.

Ecco l'aspetto della finestra di dialogo Aggiungi visualizzazione .

3AddWelcomeView

Aggiungere il codice seguente sotto l'elemento <h2> nel nuovo benvenuto.file vbhtml. Si creerà un ciclo e si dirà "Hello" quante volte l'utente dice che dovremmo!

@Code 
    For i As Integer = 0 To ViewBag.NumTimes
@<h3> @ViewBag.Message @i.ToString </h3>
     Next i
 End Code

Eseguire l'applicazione e passare a http://localhost:xx/HelloWorld/Welcome?name=Scott&numtimes=4

Ora i dati vengono acquisiti dall'URL e passati automaticamente al controller. Il controller inserisce i dati in un Model oggetto e passa tale oggetto alla visualizzazione. La visualizzazione di visualizza i dati come HTML per l'utente.

3Hello_Scott_4 3Hello_Scott_4

Queste operazioni hanno riguardato un tipo di "M" per modello, ma non il tipo di database. Creare un database di film con i concetti appresi.