Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa è un'esercitazione principiante che introduce le nozioni di base di ASP.NET MVC. Si creerà un'applicazione Web semplice che legge e scrive da un database. Visitare il centro di apprendimento MVC ASP.NET per trovare altre esercitazioni e esempi di MVC ASP.NET.
In questa sezione verrà implementato il supporto necessario per consentire agli utenti di creare nuovi film nel database. Questa operazione verrà eseguita implementando l'azione /Movies/Create URL.
L'implementazione dell'URL /Movies/Create è un processo in due passaggi. Quando un utente visita per la prima volta l'URL /Movies/Create, si vuole visualizzarli un modulo HTML che può compilare per immettere un nuovo film. Quando quindi l'utente invia il modulo e pubblica i dati al server, si vuole recuperare il contenuto pubblicato e salvarlo nel database.
Verranno implementati questi due passaggi all'interno di due metodi Create() all'interno della classe MoviesController. Un metodo mostrerà il <modulo> che l'utente deve compilare per creare un nuovo film. Il secondo metodo gestirà l'elaborazione dei dati pubblicati quando l'utente invia nuovamente il <modulo> al server e salva un nuovo filmato all'interno del database.
Di seguito è riportato il codice che verrà aggiunto alla classe MoviesController per implementare questa operazione:
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(Movie newMovie)
{
if (ModelState.IsValid)
{
db.AddToMovies(newMovie);
db.SaveChanges();
return RedirectToAction("Index");
}
else
{
return View(newMovie);
}
}
Il codice precedente contiene tutto il codice necessario all'interno del controller.
Verrà ora implementato il modello Crea visualizzazione che verrà usato per visualizzare un modulo all'utente. Fare clic con il pulsante destro del mouse nel primo metodo Create e selezionare "Aggiungi visualizzazione" per creare il modello di visualizzazione per il modulo Movie.
Verrà selezionato che si passerà il modello di visualizzazione "Movie" come classe di dati di visualizzazione e indicare che si vuole "scaffold" un modello "Create".
Dopo aver fatto clic sul pulsante Aggiungi, verrà creato il modello di visualizzazione \Movies\Create.aspx. Poiché è stata selezionata "Crea" dall'elenco a discesa "visualizza contenuto", la finestra di dialogo Aggiungi visualizzazione viene automaticamente "scaffolded" di alcuni contenuti predefiniti per noi. L'scaffolding ha creato un modulo> HTML<, un luogo per i messaggi di errore di convalida da passare e poiché scaffolding conosce i film, ha creato Etichetta e Campi per ogni proprietà della classe.
<% using (Html.BeginForm()) {%>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%: Html.LabelFor(model => model.Id) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Id) %>
<%: Html.ValidationMessageFor(model => model.Id) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Title) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Title) %>
<%: Html.ValidationMessageFor(model => model.Title) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.ReleaseDate) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.ReleaseDate) %>
<%: Html.ValidationMessageFor(model => model.ReleaseDate) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Genre) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Genre) %>
<%: Html.ValidationMessageFor(model => model.Genre) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Price) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Price) %>
<%: Html.ValidationMessageFor(model => model.Price) %>
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% } %>
Poiché il database fornisce automaticamente un ID filmato, rimuovere tali campi che fanno riferimento al modello di riferimento. ID dalla visualizzazione Crea. Rimuovere le 7 righe dopo <campi legenda/legenda><> mentre mostrano il campo ID che non si vuole.
Ora creiamo un nuovo filmato e lo aggiungiamo al database. Questa operazione verrà eseguita di nuovo eseguendo l'applicazione e visitando l'URL "/Movies" e fare clic sul collegamento "Crea" per aggiungere un nuovo filmato.
Quando si fa clic sul pulsante Crea, si eseguirà la registrazione (tramite HTTP POST) i dati in questo modulo al metodo /Movies/Create appena creato. Proprio come quando il sistema ha preso automaticamente il parametro "numTimes" e "name" dall'URL e li ha mappati a parametri in un metodo precedente, il sistema prende automaticamente i campi modulo da un POST e li esegue il mapping a un oggetto. In questo caso, i valori dei campi in HTML come "ReleaseDate" e "Title" verranno inseriti automaticamente nelle proprietà corrette di una nuova istanza di un filmato.
Esaminiamo di nuovo il secondo metodo Create dal nostro MoviesController. Si noti come accetta un oggetto "Movie" come argomento:
[HttpPost]
public ActionResult Create(Movie newMovie)
{
if (ModelState.IsValid)
{
db.AddToMovies(newMovie);
db.SaveChanges();
return RedirectToAction("Index");
}
else
{
return View(newMovie);
}
}
Questo oggetto Movie è stato quindi passato alla versione [HttpPost] del metodo di azione Create e lo è stato salvato nel database e quindi è stato reindirizzato l'utente al metodo di azione Index() che mostrerà il risultato salvato nell'elenco dei film:
Non stiamo controllando se i nostri film sono corretti, anche se il database non ci permetterà di salvare un film senza titolo. Sarebbe bello se si potrebbe indicare all'utente che prima che il database abbia generato un errore. Questa operazione verrà eseguita successivamente aggiungendo il supporto di convalida all'applicazione.