Vylepšení podrobností a metod Delete (VB)
V tomto kurzu se naučíte základy vytváření webové aplikace ASP.NET MVC pomocí sady Microsoft Visual Web Developer 2010 Express Service Pack 1, což je bezplatná verze sady Microsoft Visual Studio. Než začnete, ujistěte se, že jste nainstalovali níže uvedené požadavky. Všechny z nich můžete nainstalovat kliknutím na následující odkaz: Instalační program webové platformy. Případně můžete jednotlivé požadavky nainstalovat pomocí následujících odkazů:
- Požadavky pro Visual Studio Web Developer Express SP1
- aktualizace nástrojů ASP.NET MVC 3
- SQL Server Compact 4.0 (podpora modulu runtime a nástrojů)
Pokud používáte Sadu Visual Studio 2010 místo visual web developeru 2010, nainstalujte požadované součásti kliknutím na následující odkaz: Požadavky sady Visual Studio 2010.
K tomuto tématu je k dispozici projekt Visual Web Developer s VB.NET zdrojovým kódem. Stáhněte si VB.NET verzi. Pokud dáváte přednost jazyku C#, přepněte do verze jazyka C# tohoto kurzu.
V této části kurzu provedete některá vylepšení automaticky generovaných Details
a Delete
metod. Tyto změny se nevyžadují, ale jen s několika malými částmi kódu můžete aplikaci snadno vylepšit.
Vylepšení podrobností a metod odstranění
Při generování Movie
kontroleru ASP.NET MVC vygenerovaný kód, který fungoval skvěle, ale dá se udělat robustnější s několika malými změnami.
Movie
Otevřete kontroler a upravte metodu Details
vrácením, HttpNotFound
když se film nenajde. Měli byste také upravit metodu Details
tak, aby nastavil výchozí hodnotu pro ID, které se mu předá. (Provedli jste podobné změny Edit
metody v části 6 tohoto kurzu.) Je však nutné změnit návratový Details
typ metody z ViewResult
na ActionResult
, protože HttpNotFound
metoda nevrací ViewResult
objekt. Následující příklad ukazuje upravenou Details
metodu.
Public Function Details(Optional ByVal id As Integer = 0) As ActionResult
Dim movie As Movie = db.Movies.Find(id)
If movie Is Nothing Then
Return HttpNotFound()
End If
Return View(movie)
End Function
Code First usnadňuje vyhledávání dat pomocí Find
metody. Důležitou bezpečnostní funkcí, kterou jsme do metody přidali, je to, že kód ověří, že Find
metoda našla film před tím, než se s ním kód pokusí něco udělat. Hacker může například na web zavést chyby změnou adresy URL vytvořené odkazy na http://localhost:xxxx/Movies/Details/1
něco podobného http://localhost:xxxx/Movies/Details/12345
(nebo jinou hodnotu, která nepředstavuje skutečný film). Pokud nekontrolujete video s hodnotou null, může to vést k chybě databáze.
Podobně změňte Delete
a DeleteConfirmed
metody tak, aby určily výchozí hodnotu parametru ID a vrátily HttpNotFound
se, když se film nenajde. Aktualizované Delete
metody v Movie
kontroleru jsou uvedené níže.
' GET: /Movies/Delete/5
Public Function Delete(Optional ByVal id As Integer = 0) As ActionResult
Dim movie As Movie = db.Movies.Find(id)
If movie Is Nothing Then
Return HttpNotFound()
End If
Return View(movie)
End Function
'
' POST: /Movies/Delete/5
<HttpPost(), ActionName("Delete")>
Public Function DeleteConfirmed(Optional ByVal id As Integer = 0) As ActionResult
Dim movie As Movie = db.Movies.Find(id)
If movie Is Nothing Then
Return HttpNotFound()
End If
db.Movies.Remove(movie)
db.SaveChanges()
Return RedirectToAction("Index")
End Function
Všimněte si, že Delete
metoda neodstraní data. Provedení operace odstranění v reakci na požadavek GET (nebo v takovém případě, provedení operace úprav, operace vytvoření nebo jakákoli jiná operace, která mění data) otevře bezpečnostní díru.
Metoda HttpPost
, která odstraní data, je pojmenovaná DeleteConfirmed
tak, aby metodě HTTP POST poskytla jedinečný podpis nebo název. Níže jsou uvedeny dva podpisy metody:
Public Function Delete(Optional ByVal id As Integer = 0) As ActionResult
<HttpPost(), ActionName("Delete")>
Public Function DeleteConfirmed(Optional ByVal id As Integer = 0) As ActionResult
Modul CLR (Common Language Runtime) vyžaduje, aby přetížené metody měly jedinečný podpis (stejný název, jiný seznam parametrů). Tady ale potřebujete dvě metody Delete – jednu pro GET a druhou pro POST – které oba vyžadují stejný podpis. (Oba musí jako parametr přijmout jedno celé číslo.)
Pokud to chcete vyřešit, můžete udělat několik věcí. Jedním z nich je dát metodám různé názvy. To jsme udělali v předchozím příkladu. To ale představuje malý problém: ASP.NET mapuje segmenty adresy URL na metody akcí podle názvu a pokud metodu přejmenujete, směrování obvykle by tuto metodu nemohlo najít. Řešení je to, co vidíte v příkladu, což je přidání ActionName("Delete")
atributu do DeleteConfirmed
metody. To efektivně provádí mapování pro směrovací systém tak, aby adresa URL, která obsahuje /Delete/pro požadavek POST, našla metodu DeleteConfirmed
.
Dalším způsobem, jak se vyhnout potížím s metodami, které mají identické názvy a podpisy, je uměle změnit podpis metody POST tak, aby zahrnoval nepoužívaný parametr. Někteří vývojáři například přidají typ FormCollection
parametru předaný metodě POST a pak tento parametr jednoduše nepoužívají:
Public Function Delete(ByVal fcNotUsed As FormCollection, Optional ByVal id As Integer = 0) As ActionResult
Dim movie As Movie = db.Movies.Find(id)
If movie Is Nothing Then
Return HttpNotFound()
End If
db.Movies.Remove(movie)
db.SaveChanges()
Return RedirectToAction("Index")
End Function
Zabalení
Teď máte kompletní ASP.NET aplikaci MVC, která ukládá data do databáze SQL Server Compact. Můžete vytvářet, číst, aktualizovat, odstraňovat a vyhledávat filmy.
V tomto základním kurzu jste začali vytvářet kontrolery, přidružovat je k zobrazením a předávat pevně zakódovaná data. Pak jste vytvořili a navrhli datový model. Kód Entity Framework First vytvořil databázi z datového modelu průběžně a systém generování uživatelského rozhraní ASP.NET MVC automaticky vygeneroval metody a zobrazení akcí pro základní operace CRUD. Pak jste přidali vyhledávací formulář, který uživatelům umožní prohledávat databázi. Změnili jste databázi tak, aby zahrnovala nový sloupec dat, a pak jste aktualizovali dvě stránky, aby se vytvořila a zobrazila tato nová data. Přidali jste ověření tím, že datový model označíte atributy z DataAnnotations
oboru názvů. Výsledné ověřování běží na klientovi a na serveru.
Pokud chcete nasadit aplikaci, je užitečné ji nejprve otestovat na místním serveru SLUŽBY IIS 7. Pomocí tohoto odkazu instalačního programu webové platformy můžete povolit nastavení služby IIS pro ASP.NET aplikace. Projděte si následující odkazy na nasazení:
Teď vám doporučujeme přejít na naši středně pokročilou úroveň Vytvoření datového modelu Entity Framework pro ASP.NET aplikace MVC a MVC Music Store kurzy, prozkoumat ASP.NET články na MSDN a podívat se na mnoho videí a zdrojů informací https://asp.net/mvc o ASP.NET MVC! Fóra ASP.NET MVC jsou skvělým místem pro kladení otázek.
Užijte si to!
— Scott Hanselman (http://hanselman.com a @shanselman na Twitteru) a Rick Anderson blogs.msdn.com/rickAndy