Esercizio - Aggiungere nuovo modulo Pizza
- 10 minuti
In questa unità verrà completata la pagina Pizza List aggiungendo un modulo per creare nuove pizze. Si aggiungeranno anche gestori di pagina per gestire l'invio del modulo e l'eliminazione delle pizze.
Aggiungere un modulo per creare nuove pizze
Per iniziare, aggiungere proprietà alla PizzaListModel classe per rappresentare l'input dell'utente. Si aggiungerà anche il gestore di pagina appropriato.
Aprire Pages\PizzaList.cshtml.cs e aggiungere la proprietà seguente alla
PizzaListModelclasse :[BindProperty] public Pizza NewPizza { get; set; } = default!;Nel codice precedente:
- Alla classe viene aggiunta una
PizzaListModelproprietà denominataNewPizza.-
NewPizzaè unPizzaoggetto .
-
- L'attributo
BindPropertyviene applicato allaNewPizzaproprietà .- L'attributo
BindPropertyviene usato per associare laNewPizzaproprietà alla pagina Razor. Quando viene effettuata una richiesta HTTP POST, laNewPizzaproprietà verrà popolata con l'input dell'utente.
- L'attributo
- La proprietà
NewPizzaviene inizializzata sudefault!.- La
default!parola chiave viene utilizzata per inizializzare laNewPizzaproprietà innull. Ciò impedisce al compilatore di generare un avviso relativo allaNewPizzaproprietà non inizializzata.
- La
- Alla classe viene aggiunta una
Aggiungere ora il gestore di pagine per HTTP POST. Nello stesso file aggiungere il metodo seguente alla
PizzaListModelclasse :public IActionResult OnPost() { if (!ModelState.IsValid || NewPizza == null) { return Page(); } _service.AddPizza(NewPizza); return RedirectToAction("Get"); }Nel codice precedente:
- La
ModelState.IsValidproprietà viene utilizzata per determinare se l'input dell'utente è valido.- Le regole di convalida vengono dedotte dagli attributi (ad esempio
RequiredeRange) nellaPizzaclasse in Models\Pizza.cs. - Se l'input dell'utente non è valido, viene chiamato il
Pagemetodo per eseguire nuovamente il rendering della pagina.
- Le regole di convalida vengono dedotte dagli attributi (ad esempio
- La
NewPizzaproprietà viene utilizzata per aggiungere una nuova pizza all'oggetto_service. - Il
RedirectToActionmetodo viene usato per reindirizzare l'utente alGetgestore di pagine, che eseguirà nuovamente il rendering della pagina con l'elenco aggiornato di pizze.
- La
Salva il file. Se si usa GitHub Codespaces, il file viene salvato automaticamente.
Tornare al terminale in esecuzione
dotnet watche premere CTRL+R per ricaricare l'app.
Ora che è presente un gestore di pagine per gestire l'invio del modulo, aggiungere il modulo alla pagina Razor.
Aprire Pages\PizzaList.cshtml e sostituire
<!-- New Pizza form will go here -->con il codice seguente:<form method="post"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for="NewPizza.Name" class="control-label"></label> <input asp-for="NewPizza.Name" class="form-control" /> <span asp-validation-for="NewPizza.Name" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="NewPizza.Size" class="control-label"></label> <select asp-for="NewPizza.Size" class="form-control" id="PizzaSize"> <option value="">-- Select Size --</option> <option value="Small">Small</option> <option value="Medium">Medium</option> <option value="Large">Large</option> </select> <span asp-validation-for="NewPizza.Size" class="text-danger"></span> </div> <div class="form-group form-check"> <label class="form-check-label"> <input class="form-check-input" asp-for="NewPizza.IsGlutenFree" /> @Html.DisplayNameFor(model => model.NewPizza.IsGlutenFree) </label> </div> <div class="form-group"> <label asp-for="NewPizza.Price" class="control-label"></label> <input asp-for="NewPizza.Price" class="form-control" /> <span asp-validation-for="NewPizza.Price" class="text-danger"></span> </div> <div class="form-group"> <input type="submit" value="Create" class="btn btn-primary" /> </div> </form>Nel codice precedente:
- L'attributo
asp-validation-summaryviene usato per visualizzare gli errori di convalida per l'intero modello. - Ogni campo modulo (
<input>e elementi) e<select>ognuno<label>è associato alla proprietà corrispondenteNewPizzausando l'attributoasp-for. - L'attributo
asp-validation-forviene usato per visualizzare eventuali errori di convalida per ogni campo modulo. - Il
@Html.DisplayNameFormetodo viene utilizzato per visualizzare il nome visualizzato per laIsGlutenFreeproprietà . Si tratta di un metodo helper Razor usato per visualizzare il nome visualizzato per una proprietà. In questo modo l'etichetta garantisce che la casella di controllo sia selezionata quando l'utente fa clic sull'etichetta. - Al modulo viene aggiunto un pulsante di invio con etichetta
Createper inserire i dati del modulo nel server. In fase di esecuzione, quando l'utente seleziona questo pulsante Crea , il browser invia il modulo come richiesta HTTP POST al server.
- L'attributo
Nella parte inferiore della pagina aggiungere il codice seguente:
@section Scripts { <partial name="_ValidationScriptsPartial" /> }In questo modo gli script di convalida lato client vengono inseriti nella pagina. Gli script di convalida lato client vengono usati per convalidare l'input dell'utente prima che il modulo venga inviato al server.
Salva il file. Nel browser la pagina Elenco pizza viene aggiornata con il nuovo modulo. Se si usa GitHub Codespaces, il file viene salvato automaticamente, ma sarà necessario aggiornare manualmente la scheda del browser.
Immettere una nuova pizza e selezionare il pulsante Crea . La pagina deve aggiornare e visualizzare la nuova pizza nell'elenco.
Aggiungere un gestore di pagine per eliminare le pizze
C'è un ultimo pezzo da aggiungere alla pagina Pizza List: un gestore di pagina per eliminare le pizze. I pulsanti per eliminare le pizze sono già presenti nella pagina, ma non fanno ancora nulla.
Tornare a Pages\PizzaList.cshtml.cs, aggiungere il metodo seguente alla
PizzaListModelclasse :public IActionResult OnPostDelete(int id) { _service.DeletePizza(id); return RedirectToAction("Get"); }Nel codice precedente:
- Il
OnPostDeletemetodo viene chiamato quando l'utente fa clic sul pulsante Elimina per una pizza.- La pagina sa di usare questo metodo perché l'attributo
asp-page-handlernel pulsante Elimina in Pages\PizzaList.cshtml è impostato suDelete.
- La pagina sa di usare questo metodo perché l'attributo
- Il
idparametro viene usato per identificare la pizza da eliminare.- Il
idparametro è associato al valore diidroute nell'URL. Questa operazione viene eseguita con l'attributoasp-route-idsul pulsante Elimina in Pages\PizzaList.cshtml.
- Il
- Il
DeletePizzametodo viene chiamato sull'oggetto_serviceper eliminare la pizza. - Il
RedirectToActionmetodo viene usato per reindirizzare l'utente alGetgestore di pagine, che eseguirà nuovamente il rendering della pagina con l'elenco aggiornato di pizze.
- Il
Salva il file. Se si usa GitHub Codespaces, il file viene salvato automaticamente.
Testare il pulsante Elimina per una pizza. La pagina deve essere aggiornata e la pizza selezionata deve essere rimossa dall'elenco.
Congratulazioni! È stata creata correttamente una pagina Razor che visualizza un elenco di pizze, consente all'utente di aggiungere nuove pizze e consente anche all'utente di eliminare le pizze.