Sdílet prostřednictvím


Přístup k datům modelu z kontroleru pomocí šablony zobrazení

Rick Anderson

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.)

AddScaffoldedMovieController

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/Indexprohlížeče . Výsledkem je prázdný seznam filmů, protože jste zatím žádné nepřidali.

Snímek obrazovky znázorňující stránku indexu filmu V

Vytvoření videa

Vyberte odkaz Vytvořit nový. Zadejte podrobnosti o filmu a klikněte na tlačítko Vytvořit .

Snímek obrazovky znázorňující stránku Pro vytvoření videa V

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.

IndexWhenHarryMet

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:

ModelIntelliSense

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.

Snímek obrazovky znázorňující okno Průzkumník řešení Ikona Zobrazit všechny soubory je zakroužkovaná červeně a je vybraná složka Data aplikace.

Poklikáním na Movies.mdf otevřete PRŮZKUMNÍK DATABÁZE a rozbalte složku Tabulky, aby se zobrazila tabulka Filmy.

DB_explorer

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.

Snímek obrazovky znázorňující kartu d b o tečka Movies Data

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.

Snímek obrazovky s oknem Průzkumníka databáze V nabídce Filmy pravým tlačítkem myši je vybrána možnost Otevřít definici tabulky.

Snímek obrazovky znázorňující kartu d b o tečky Filmy a kód Entity Frameworku pod ním

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.

Snímek obrazovky s oknem Průzkumníka databáze V místní nabídce Movie D B je vybráno zavřít připojení.

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.