Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anmärkning
En uppdaterad version av den här självstudien finns här med den senaste versionen av Visual Studio. Den nya självstudien använder ASP.NET Core MVC, vilket ger många förbättringar i den här självstudien.
I den här handledningen lär du dig ASP.NET Core MVC med kontrollrar och vyer. Razor Pages är ett nytt alternativ i ASP.NET Core, en sidbaserad programmeringsmodell som gör det enklare och mer produktivt att skapa webbgränssnitt. Vi rekommenderar att du provar självstudiekursen för Razor Pages före MVC-versionen. Självstudiekursen för Razor Pages:
- Är lättare att följa.
- Omfattar fler funktioner.
- Är den bästa metoden för ny apputveckling.
I det här avsnittet skapar du en ny MoviesController klass och skriver kod som hämtar filmdata och visar dem i webbläsaren med hjälp av en vymall.
Skapa programmet innan du går vidare till nästa steg. Om du inte skapar programmet får du ett fel när du lägger till en kontrollant.
Högerklicka på mappen Controllers i Solution Explorer och klicka sedan på Lägg till och sedan på Styrenhet.
I dialogrutan Lägg till Scaffold klickar du på MVC 5-kontroller med vyer, med hjälp av Entity Framework och klickar sedan på Lägg till.
Välj Film (MvcMovie.Models) för klassen Modell.
Välj MovieDBContext (MvcMovie.Models) för klassen Datakontext.
För kontrollantnamnet anger du MoviesController.
Bilden nedan visar den slutförda dialogrutan.
Klicka på Lägg till. (Om du får ett fel har du förmodligen inte skapat programmet innan du börjar lägga till kontrollanten.) Visual Studio skapar följande filer och mappar:
- En MoviesController.cs fil i mappen Controllers .
- En Vy\Movies-mapp.
- Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml och Index.cshtml i den nya mappen Views\Movies .
Visual Studio skapade automatiskt crud-åtgärdsmetoderna (skapa, läsa, uppdatera och ta bort) och vyer åt dig (det automatiska skapandet av CRUD-åtgärdsmetoder och vyer kallas för scaffolding). Nu har du ett fullt fungerande webbprogram som gör att du kan skapa, lista, redigera och ta bort filmposter.
Kör programmet och klicka på länken MVC-film (eller bläddra till kontrollanten Movies genom att lägga till /Movies till URL:en i webbläsarens adressfält). Eftersom programmet förlitar sig på standarddirigeringen (definieras i filen App_Start\RouteConfig.cs) dirigeras webbläsarbegäran http://localhost:xxxxx/Movies till kontrollantens Index standardåtgärdsmetodMovies. Med andra ord är webbläsarbegäran http://localhost:xxxxx/Movies i praktiken densamma som webbläsarbegäran http://localhost:xxxxx/Movies/Index. Resultatet är en tom lista över filmer eftersom du inte har lagt till några ännu.
Skapa en film
Välj länken Skapa ny . Ange lite information om en film och klicka sedan på knappen Skapa .
Anmärkning
Du kanske inte kan ange decimaltecken eller kommatecken i fältet Pris. Om du vill stödja jQuery-validering för icke-engelska språkvarianter som använder kommatecken (",") för decimaltecken och datumformat som inte är av typen US-engelska, måste du inkludera globalize.js och dina specifika kulturer/globalize.cultures.js fil (från https://github.com/jquery/globalize ) och JavaScript för att använda Globalize.parseFloat. Jag ska visa hur du gör detta i nästa handledning. För tillfället anger du heltal som 10.
Om du klickar på knappen Skapa publiceras formuläret på servern, där filminformationen sparas i databasen. Du omdirigeras sedan till URL:en /Movies , där du kan se den nyligen skapade filmen i listan.
Skapa ett par till filminlägg. Prova länkarna Redigera, Information och Ta bort , som alla är funktionella.
Undersöka den genererade koden
Öppna filen Controllers\MoviesController.cs och granska den genererade Index metoden. En del av filmkontrollerstyrningen med Index-metoden visas nedan.
public class MoviesController : Controller
{
private MovieDBContext db = new MovieDBContext();
// GET: /Movies/
public ActionResult Index()
{
return View(db.Movies.ToList());
}
En begäran till kontrollanten Movies returnerar alla poster i Movies tabellen och skickar sedan resultatet till Index vyn. Följande rad från MoviesController klassen instansierar en filmdatabaskontext enligt beskrivningen tidigare. Du kan använda filmdatabaskontexten för att fråga, redigera och ta bort filmer.
private MovieDBContext db = new MovieDBContext();
Starkt inskrivna modeller och nyckelordet @model
Tidigare i den här självstudien såg du hur en kontrollant kan skicka data eller objekt till en vymall med hjälp av ViewBag objektet.
ViewBag är ett dynamiskt objekt som ger ett praktiskt sätt att med sen bindning skicka information till en visning.
MVC ger också möjlighet att skicka starkt skrivna objekt till en vymall. Den här starkt skrivna metoden ger bättre kompileringstidskontroll av din kod och mer omfattande IntelliSense i Visual Studio-redigeraren. Scaffolding-mekanismen i Visual Studio använde den här metoden (dvs. att skicka en starkt typad modell) tillsammans med MoviesController klass- och visningsmallarna när den skapade metoderna och vyerna.
I filen Controllers\MoviesController.cs undersöker du den genererade Details metoden. Metoden Details visas nedan.
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
Parametern id skickas vanligtvis som routningsdata, till exempel när http://localhost:1234/movies/details/1 ställer in kontrollern till filmkontrollern, och åtgärden till details, och sätter id till 1. Du kan också skicka id:t med en frågesträng på följande sätt:
http://localhost:1234/movies/details?id=1
Om en Movie hittas skickas en instans av Movie modellen till Details vyn:
return View(movie);
Granska innehållet i filen Views\Movies\Details.cshtml :
@model MvcMovie.Models.Movie
@{
ViewBag.Title = "Details";
}
<h2>Details</h2>
<div>
<h4>Movie</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.Title)
</dt>
@*Markup omitted for clarity.*@
</dl>
</div>
<p>
@Html.ActionLink("Edit", "Edit", new { id = Model.ID }) |
@Html.ActionLink("Back to List", "Index")
</p>
Genom att inkludera en @model instruktion överst i vymallfilen kan du ange vilken typ av objekt som vyn förväntar sig. När du skapade filmkontrollanten inkluderade Visual Studio automatiskt följande @model instruktion överst i filen Details.cshtml :
@model MvcMovie.Models.Movie
Med det här @model direktivet kan du komma åt filmen som kontrollanten skickade till vyn med hjälp av ett Model objekt som är starkt skrivet. I mallen Details.cshtml skickar koden till exempel varje filmfält till DisplayNameFor och DisplayFor HTML Helpers med det starkt inskrivna Model objektet. Metoderna Create och Edit samt visningsmallarna skickar också med ett filmmodellobjekt.
Granska vy mallen Index.cshtml och metoden Index i MoviesController.cs filen. Observera hur koden skapar ett List objekt när den View anropar hjälpmetoden i Index åtgärdsmetoden. Koden skickar sedan den här Movies listan från Index åtgärdsmetoden till vyn:
public ActionResult Index()
{
return View(db.Movies.ToList());
}
När du skapade filmkontrollanten inkluderade Visual Studio automatiskt följande @model -instruktion överst i filen Index.cshtml :
@model IEnumerable<MvcMovie.Models.Movie>
Med det här @model direktivet kan du komma åt listan över filmer som kontrollanten skickade till vyn med hjälp av ett Model objekt som är starkt skrivet. I mallen Index.cshtml loopar koden till exempel igenom filmerna genom att göra en foreach instruktion över det starkt skrivna Model objektet:
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReleaseDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Genre)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<th>
@Html.DisplayFor(modelItem => item.Rating)
</th>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
</td>
</tr>
}
Eftersom objektet Model är starkt typat (som ett IEnumerable<Movie> objekt), är varje item objekt i loopen typat som Movie. Det innebär bland annat att du får kompileringstidskontroll av koden och fullständigt IntelliSense-stöd i kodredigeraren:
Arbeta med SQL Server LocalDB
Entity Framework Code upptäckte först att databasanslutningssträngen som angavs pekade på en Movies databas som inte fanns ännu, så Code First skapade databasen automatiskt. Du kan kontrollera att den har skapats genom att titta i mappen App_Data . Om du inte ser filen Movies.mdf klickar du på knappen Visa alla filer i verktygsfältet i Solution Explorer , klickar på knappen Uppdatera och expanderar sedan mappen App_Data .
Dubbelklicka på Movies.mdf för att öppna SERVER EXPLORER och expandera sedan mappen Tabeller för att se tabellen Filmer. Observera nyckelikonen bredvid ID. Som standard gör EF en egenskap med namnet ID till primärnyckel. Mer information om EF och MVC finns i Tom Dykstras utmärkta självstudie om MVC och EF.
Högerklicka på tabellen Movies och välj Visa tabelldata för att se de data som du skapade.
Högerklicka på tabellen Movies och välj Öppna tabelldefinition för att se tabellstrukturen som Entity Framework Code först skapade åt dig.
Observera hur schemat för Movies tabellen mappas till den Movie klass som du skapade tidigare. Entity Framework Code First skapade automatiskt det här schemat åt dig baserat på din Movie klass.
När du är klar stänger du anslutningen genom att högerklicka på MovieDBContext och välja Stäng anslutning. (Om du inte stänger anslutningen kan du få ett fel nästa gång du kör projektet).
Nu har du en databas och sidor där du kan visa, redigera, uppdatera och ta bort data. I nästa handledning kommer vi att undersöka resten av den genererade koden och lägga till en SearchIndex metod och en SearchIndex vy som låter dig söka efter filmer i den här databasen. Mer information om hur du använder Entity Framework med MVC finns i Skapa en Entity Framework-datamodell för ett ASP.NET MVC-program.