Sdílet prostřednictvím


Přidání metody Create a zobrazení Create

Scott Hanselman

Toto je kurz pro začátečníky, který představuje základy ASP.NET MVC. Vytvoříte jednoduchou webovou aplikaci, která čte a zapisuje z databáze. Další kurzy a ukázky ASP.NET MVC najdete ve výukovém centru ASP.NET MVC .

V této části implementujeme podporu potřebnou k tomu, aby uživatelé mohli v naší databázi vytvářet nové filmy. Provedeme to implementací akce /Filmy/Vytvořit adresu URL.

Implementace adresy URL /Movies/Create je dvoustupňový proces. Když uživatel poprvé navštíví adresu URL /Movies/Create, chceme mu zobrazit formulář HTML, který může vyplnit a zadat nový film. Když pak uživatel odešle formulář a odešle data zpět na server, chceme načíst publikovaný obsah a uložit ho do naší databáze.

Tyto dva kroky implementujeme v rámci dvou metod Create() v rámci naší třídy MoviesController. Jedna metoda zobrazí <formulář> , který by měl uživatel vyplnit, aby vytvořil nový film. Druhá metoda zpracuje zaúčtované údaje, když uživatel odešle <formulář> zpět na server a uloží nový film v naší databázi.

Níže je kód, který přidáme do naší třídy MoviesController pro implementaci:

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);
    }
}

Výše uvedený kód obsahuje veškerý kód, který budeme potřebovat v rámci kontroleru.

Pojďme teď implementovat šablonu Vytvořit zobrazení, kterou použijeme k zobrazení formuláře uživateli. Kliknutím pravým tlačítkem myši na první metodu Create a výběrem možnosti Přidat zobrazení vytvoříme šablonu zobrazení pro formulář Film.

Vybereme, že šabloně zobrazení předáme třídu "Movie" jako její třídu dat zobrazení a označíme, že chceme šablonu Vytvořit vygenerovat.

Přidat zobrazení

Po kliknutí na tlačítko Přidat se pro vás vytvoří šablona zobrazení \Movies\Create.aspx. Vzhledem k tomu, že jsme v rozevíracím seznamu zobrazit obsah vybrali Vytvořit, dialogové okno Přidat zobrazení automaticky vygeneroval nějaký výchozí obsah. Generování uživatelského rozhraní vytvořilo formulář> HTML<, místo, kde se mají zobrazovat chybové zprávy ověření, a protože generování ví o filmech, vytvořilo popisky a pole pro každou vlastnost naší třídy.

<% 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>

<% } %>

Vzhledem k tomu, že naše databáze automaticky poskytuje ID filmu, odeberme pole, která odkazují na model. ID z našeho zobrazení pro vytvoření. Odeberte 7 řádků za <legendou>Pole</legenda> , protože zobrazují pole ID, které nechceme.

Teď vytvoříme nový film a přidáme ho do databáze. Provedeme to tak, že aplikaci znovu spustíme, navštívíme adresu URL /Movies a kliknutím na odkaz Vytvořit přidáme nový film.

Vytvoření – Windows Internet Explorer

Když klikneme na tlačítko Vytvořit, zveřejníme zpět (prostřednictvím HTTP POST) data v tomto formuláři metodě /Movies/Create, kterou jsme právě vytvořili. Stejně jako když systém dříve automaticky převzal parametry "numTimes" a "name" z adresy URL a namapoval je na parametry metody, systém automaticky převezme pole formuláře z post a namapuje je na objekt. V tomto případě se hodnoty z polí v HTML, jako jsou "ReleaseDate" a "Title", automaticky umístí do správných vlastností nové instance movie.

Pojďme se znovu podívat na druhou metodu Create z aplikace MoviesController. Všimněte si, že jako argument používá objekt Movie:

[HttpPost]
public ActionResult Create(Movie newMovie)
{
    if (ModelState.IsValid)
    {
        db.AddToMovies(newMovie);
        db.SaveChanges();

        return RedirectToAction("Index");
    }
    else
    {
        return View(newMovie);
    }
}

Tento objekt Movie se pak předal do [HttpPost] verze naší metody akce Create a uložili jsme ho do databáze a pak uživatele přesměrovali zpět na metodu akce Index(), která zobrazí uložený výsledek v seznamu filmů:

Seznam filmů – Windows Internet Explorer

Nekontrolujeme ale, jestli jsou naše filmy správné, a databáze nám neumožní uložit film bez názvu. Bylo by hezké, kdybychom uživateli mohli říct, že před databází došlo k chybě. V dalším kroku to uděláme přidáním podpory ověřování do naší aplikace.