Přístup k datům modelu z kontroleru pomocí šablony zobrazení
Poznámka:
Aktualizovaná verze tohoto kurzu je k dispozici zde , která používá ASP.NET MVC 5 a Visual Studio 2013. Je bezpečnější, mnohem jednodušší sledovat a demonstrovat další funkce.
V této části vytvoříte novou MoviesController
třídu a napíšete kód, který načte data filmu a zobrazí je v prohlížeči pomocí šablony zobrazení.
Než přejdete k dalšímu kroku, sestavte aplikaci .
Klikněte pravým tlačítkem myši na složku Kontrolery a vytvořte nový MoviesController
kontroler. Následující možnosti se nezobrazí, dokud nevytvojíte aplikaci. Vyberte následující možnosti:
- Název kontroleru: MoviesController. (Toto je výchozí hodnota. )
- Šablona: Kontroler MVC s akcemi čtení a zápisu a zobrazeními pomocí Entity Frameworku
- Třída modelu: Film (MvcMovie.Models).
- Třída kontextu dat: MovieDBContext (MvcMovie.Models).
- Zobrazení: Razor (CSHTML). (Výchozí hodnota.)
Klikněte na tlačítko Přidat. Visual Studio Express vytvoří následující soubory a složky:
- Soubor MoviesController.cs ve složce Kontrolery projektu.
- Složka Filmy ve složce Zobrazení projektu.
- Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml a Index.cshtml v nové složce Views\Movies .
ASP.NET MVC 4 automaticky vytvořily metody a zobrazení akcí CRUD (vytvoření, čtení, aktualizace a odstranění) za vás (automatické vytvoření metod a zobrazení akcí CRUD se označuje jako generování uživatelského rozhraní). Teď máte plně funkční webovou aplikaci, která umožňuje vytvářet, vypisovat, upravovat a odstraňovat položky filmů.
Spusťte aplikaci a přejděte na Movies
kontroler připojením /Movies k adrese URL v adresním řádku prohlížeče. Vzhledem k tomu, že aplikace spoléhá na výchozí směrování (definované v souboru Global.asax ), požadavek http://localhost:xxxxx/Movies
prohlížeče se směruje na výchozí Index
metodu Movies
akce kontroleru. Jinými slovy, požadavek http://localhost:xxxxx/Movies
prohlížeče je v podstatě stejný jako požadavek http://localhost:xxxxx/Movies/Index
prohlížeče . Výsledkem je prázdný seznam filmů, protože jste zatím žádné nepřidali.
Vytvoření videa
Vyberte odkaz Vytvořit nový. Zadejte podrobnosti o filmu a klikněte na tlačítko Vytvořit .
Kliknutím na tlačítko Vytvořit dojde k publikování formuláře na server, kde jsou informace o filmu uloženy v databázi. Pak budete přesměrováni na adresu URL /Movies , kde uvidíte nově vytvořený film ve výpisu.
Vytvořte několik dalších položek filmu. Vyzkoušejte odkazy Upravit, Podrobnosti a Odstranit, které jsou všechny funkční.
Zkoumání vygenerovaného kódu
Otevřete soubor Controllers\MoviesController.cs a prozkoumejte vygenerovanou Index
metodu. Část ovladače videa s metodou je znázorněna Index
níže.
public class MoviesController : Controller
{
private MovieDBContext db = new MovieDBContext();
//
// GET: /Movies/
public ActionResult Index()
{
return View(db.Movies.ToList());
}
Následující řádek z MoviesController
třídy vytvoří instanci kontextu filmové databáze, jak je popsáno výše. Kontext filmové databáze můžete použít k dotazování, úpravám a odstraňování filmů.
private MovieDBContext db = new MovieDBContext();
Požadavek na Movies
kontroler vrátí všechny položky v Movies
tabulce filmové databáze a výsledky pak předá zobrazení Index
.
Modely silného @model typu a klíčové slovo
Dříve v tomto kurzu jste viděli, jak může kontroler předat data nebo objekty do šablony zobrazení pomocí objektu ViewBag
. Jedná se ViewBag
o dynamický objekt, který poskytuje pohodlný pozdní způsob předávání informací do zobrazení.
ASP.NET MVC také umožňuje předávat data nebo objekty silného typu do šablony zobrazení. Tento přístup silného typu umožňuje lepší kontrolu času kompilace kódu a bohatší IntelliSense v editoru sady Visual Studio. Mechanismus generování uživatelského rozhraní v sadě Visual Studio tento přístup použil při MoviesController
vytváření metod a zobrazení šablon tříd a zobrazení.
V souboru Controllers\MoviesController.cs prozkoumejte vygenerovanou Details
metodu. Část ovladače videa s metodou je znázorněna Details
níže.
public ActionResult Details(int id = 0)
{
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
Movie
Pokud se najde, předá se do zobrazení Podrobností instance Movie
modelu. Prozkoumejte obsah souboru Views\Movies\Details.cshtml .
Zahrnutím @model
příkazu v horní části souboru šablony zobrazení můžete určit typ objektu, který zobrazení očekává. Při vytváření řadiče videa sada Visual Studio automaticky zahrnula následující @model
příkaz v horní části souboru Details.cshtml :
@model MvcMovie.Models.Movie
Tato @model
direktiva umožňuje přístup k filmu, který řadič předal do zobrazení pomocí objektu silného Model
typu. Například v šabloně Details.cshtml kód předá každé pole videa do DisplayNameFor
pomocné rutiny DisplayFor HTML se silným typem Model
objektu. Metody Vytvoření a úpravy a šablony zobrazení také předávají objekt modelu videa.
Prozkoumejte šablonu zobrazení Index.cshtml a metodu Index
v souboru MoviesController.cs. Všimněte si, jak kód vytvoří List
objekt při volání View
pomocné metody v Index
metodě akce. Kód pak předá tento Movies
seznam ze kontroleru do zobrazení:
public ActionResult Index()
{
return View(db.Movies.ToList());
}
Když jste vytvořili řadič videa, Visual Studio Express automaticky zahrnul následující @model
příkaz v horní části souboru Index.cshtml :
@model IEnumerable<MvcMovie.Models.Movie>
Tato @model
direktiva umožňuje přístup k seznamu filmů, které řadič předal do zobrazení pomocí objektu silného Model
typu. Například v šabloně Index.cshtml kód prochází filmy provedením foreach
příkazu nad objektem silného typu Model
:
@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", { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", { id=item.ID })
</td>
</tr>
}
Vzhledem k tomu, že Model
objekt je silného typu (jako IEnumerable<Movie>
objekt), každý item
objekt ve smyčce je zadán jako Movie
. Kromě dalších výhod to znamená, že v editoru kódu získáte kontrolu doby kompilace a úplné podpory IntelliSense:
Práce s verzí SQL Server LocalDB
Kód Entity Framework First zjistil, že databáze připojovací řetězec, která byla uvedena na Movies
databázi, která ještě neexistuje, takže Code First databázi vytvořila automaticky. To, že je vytvořený, můžete ověřit tak, že se podíváte do složky App_Data . Pokud Movies.mdf soubor nevidíte, klikněte na tlačítko Zobrazit všechny soubory na panelu nástrojů Průzkumník řešení, klikněte na tlačítko Aktualizovat a rozbalte složku App_Data.
Poklikáním na Movies.mdf otevřete PRŮZKUMNÍK DATABÁZE a rozbalte složku Tabulky, aby se zobrazila tabulka Filmy.
Poznámka:
Pokud se průzkumník databáze nezobrazí, v nabídce NÁSTROJE vyberte Připojit k databázi a pak zrušte dialogové okno Zvolit zdroj dat. Tím se vynutí otevření Průzkumníka databáze.
Poznámka:
Pokud používáte VWD nebo Visual Studio 2010 a zobrazí se chyba podobná některé z následujících možností:
- Databáze C:\Webs\MVC4\MVCMOVIE\MVCMOVIE\APP_DATA\MOVIES. MDF nelze otevřít, protože je verze 706. Tento server podporuje verzi 655 a starší. Cesta downgradu není podporována.
- "InvalidOperation Exception was unhandled by user code" Zadaný sqlConnection neurčuje počáteční katalog.
Musíte nainstalovat sql Server Data Tools a LocalDB. MovieDBContext
Ověřte připojovací řetězec zadané na předchozí stránce.
Klikněte pravým tlačítkem myši na Movies
tabulku a vyberte Zobrazit data tabulky, abyste zobrazili data, která jste vytvořili.
Klikněte pravým tlačítkem myši na Movies
tabulku a vyberte Otevřít definici tabulky, abyste viděli strukturu tabulky, kterou pro vás vytvořil kód Entity Framework Code First.
Všimněte si, jak schéma Movies
tabulky mapuje na Movie
třídu, kterou jste vytvořili dříve. Entity Framework Code First automaticky vytvořil toto schéma pro vás na základě vaší Movie
třídy.
Až budete hotovi, zavřete připojení tak, že kliknete pravým tlačítkem na MovieDBContext a vyberete Zavřít připojení. (Pokud připojení nezavřete, může se při příštím spuštění projektu zobrazit chyba.
Teď máte databázi a jednoduchou stránku výpisu pro zobrazení obsahu z ní. V dalším kurzu prozkoumáme zbytek vygenerovaného kódu a přidáme metodu SearchIndex
a SearchIndex
zobrazení, které vám umožní hledat filmy v této databázi.