Aracılığıyla paylaş


Details ve Delete Metotlarını Geliştirme (C#)

tarafından Rick Anderson

Not

Bu öğreticinin ASP.NET MVC 5 ve Visual Studio 2013 kullanan güncelleştirilmiş bir sürümü burada bulunabilir. Daha güvenlidir, takip etmek çok daha kolaydır ve daha fazla özellik gösterir.

Bu öğreticide, Microsoft Visual Studio'nun ücretsiz sürümü olan Microsoft Visual Web Developer 2010 Express Service Pack 1'i kullanarak ASP.NET MVC Web uygulaması oluşturmanın temelleri öğretilecektir. Başlamadan önce, aşağıda listelenen önkoşulları yüklediğinizden emin olun. Aşağıdaki bağlantıya tıklayarak bunların tümünü yükleyebilirsiniz: Web Platformu Yükleyicisi. Alternatif olarak, aşağıdaki bağlantıları kullanarak önkoşulları tek tek yükleyebilirsiniz:

Visual Web Developer 2010 yerine Visual Studio 2010 kullanıyorsanız, şu bağlantıya tıklayarak önkoşulları yükleyin: Visual Studio 2010 önkoşulları.

C# kaynak kodu içeren bir Visual Web Developer projesi bu konuya eşlik edebilir. C# sürümünü indirin. Visual Basic'i tercih ediyorsanız, bu öğreticinin Visual Basic sürümüne geçin.

Öğreticinin bu bölümünde, otomatik olarak oluşturulan Details ve Delete yöntemlerinde bazı geliştirmeler yapacaksınız. Bu değişiklikler gerekli değildir, ancak yalnızca birkaç küçük kod parçasıyla uygulamayı kolayca geliştirebilirsiniz.

Ayrıntılar ve Silme Yöntemlerini Geliştirme

Denetleyicinin iskelesini Movie oluşturduğunuzda ASP.NET MVC, harika çalışan ancak yalnızca birkaç küçük değişiklikle daha sağlam hale getirilebilen bir kod oluşturdu.

Denetleyiciyi Movie açın ve bir film bulunamadığında döndürerek HttpNotFound yöntemini değiştirinDetails. Ayrıca, yöntemine Details geçirilen kimlik için varsayılan bir değer ayarlamak üzere değiştirmelisiniz. (Bu öğreticinin Edit6. bölümünde yönteminde benzer değişiklikler yaptınız.) Ancak yöntemin dönüş türünü DetailsViewResultActionResultolarak değiştirmeniz gerekir çünkü HttpNotFound yöntemi bir ViewResult nesne döndürmez. Aşağıdaki örnekte değiştirilmiş Details yöntem gösterilmektedir.

public ActionResult Details(int id = 0)
{
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    return View(movie);
}

Code First, yöntemini kullanarak Find veri aramayı kolaylaştırır. yönteminde yerleşik olarak sunduğumuz önemli bir güvenlik özelliği, kodun, kodla bir şey yapmaya çalışmadan önce yöntemin bir film bulduğunu doğrulamasıdır Find . Örneğin, bir bilgisayar korsanı bağlantılar http://localhost:xxxx/Movies/Details/1 tarafından oluşturulan URL'yi gibi http://localhost:xxxx/Movies/Details/12345 bir değere (veya gerçek bir filmi temsil etmeyen başka bir değere) değiştirerek siteye hata verebilir. Null film denetimine sahip değilseniz, bu bir veritabanı hatasına neden olabilir.

Benzer şekilde, id parametresi için varsayılan bir değer belirtmek ve film bulunamadığında döndürmek HttpNotFound için ve DeleteConfirmed yöntemlerini değiştirinDelete. Denetleyicideki Movie güncelleştirilmiş Delete yöntemler aşağıda gösterilmiştir.

// GET: /Movies/Delete/5

public ActionResult Delete(int id = 0)
{
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    return View(movie);
}

//
// POST: /Movies/Delete/5

[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id = 0)
{
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    db.Movies.Remove(movie);
    db.SaveChanges();
    return RedirectToAction("Index");
}

yönteminin Delete verileri silmediğini unutmayın. BIR GET isteğine yanıt olarak silme işlemi gerçekleştirmek (veya bu nedenle, düzenleme işlemi gerçekleştirmek, işlem oluşturmak veya verileri değiştiren başka bir işlem) bir güvenlik deliği açar. Bu konuda daha fazla bilgi için Bkz. Stephen Walther'ın MVC İpucu #46 ASP.NET blog girdisi — Güvenlik Delikleri oluşturdukları için Bağlantıları Sil'i kullanmayın.

Verileri HttpPost silecek yöntem, HTTP POST yöntemine benzersiz bir imza veya ad vermek için adlandırılır DeleteConfirmed . İki yöntem imzası aşağıda gösterilmiştir:

// GET: /Movies/Delete/5
public ActionResult Delete(int id = 0)

//
// POST: /Movies/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id = 0)

Ortak dil çalışma zamanı (CLR), aşırı yüklenmiş yöntemlerin benzersiz bir imzaya (aynı ad, farklı parametre listesi) sahip olmasını gerektirir. Ancak burada biri GET, diğeri POST için olan ve her ikisi de aynı imzayı gerektiren iki Delete yöntemine ihtiyacınız vardır. (Her ikisinin de parametre olarak tek bir tamsayı kabul etmeleri gerekir.)

Bunu çözmek için birkaç şey yapabilirsiniz. Bunlardan biri, yöntemlere farklı adlar vermektir. Önceki örnekte de bunu yaptık. Ancak bu küçük bir soruna neden olur: ASP.NET URL'nin segmentlerini eylem yöntemlerine ada göre eşler ve bir yöntemi yeniden adlandırırsanız yönlendirme normalde bu yöntemi bulamaz. Çözüm, örnekte gördüğünüz yönteme özniteliğini DeleteConfirmed eklemektirActionName("Delete"). Bu, bir POST isteği için /Delete/ içeren bir URL'nin yöntemini bulması için yönlendirme sistemi için eşlemeyi DeleteConfirmed etkili bir şekilde gerçekleştirir.

Aynı adlara ve imzalara sahip yöntemlerle ilgili bir sorundan kaçınmanın bir diğer yolu da POST yönteminin imzasını kullanılmayan bir parametre içerecek şekilde yapay olarak değiştirmektir. Örneğin, bazı geliştiriciler POST yöntemine geçirilen bir parametre türü FormCollection ekler ve parametreyi kullanmaz:

public ActionResult Delete(FormCollection fcNotUsed, int id = 0)
{
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    db.Movies.Remove(movie);
    db.SaveChanges();
    return RedirectToAction("Index");
}

Sarmalama

Artık verileri SQL Server Compact veritabanında depolayan eksiksiz bir ASP.NET MVC uygulamanız var. Film oluşturabilir, okuyabilir, güncelleştirebilir, silebilir ve film arayabilirsiniz.

M V C Film Uygulamasında Arama Dizini sayfasını gösteren ekran görüntüsü. Sayfada dört filmden oluşan bir liste gösterilir.

Bu temel öğreticide denetleyiciler oluşturmaya, bunları görünümlerle ilişkilendirmeye ve sabit kodlanmış verileri geçirmeye başladınız. Ardından bir veri modeli oluşturup tasarladınız. Entity Framework Code İlk olarak veri modelinden anında bir veritabanı oluşturdu ve ASP.NET MVC yapı iskelesi sistemi, temel CRUD işlemleri için eylem yöntemlerini ve görünümlerini otomatik olarak oluşturdu. Ardından kullanıcıların veritabanında arama yapmasına olanak sağlayan bir arama formu eklediniz. Veritabanını yeni bir veri sütunu içerecek şekilde değiştirdiniz ve ardından bu yeni verileri oluşturup görüntülemek için iki sayfayı güncelleştirmiştiniz. Veri modelini ad alanından özniteliklerle DataAnnotations işaretleyerek doğrulama eklediniz. Sonuçta elde edilen doğrulama istemcide ve sunucuda çalışır.

Uygulamanızı dağıtmak isterseniz, önce uygulamayı yerel IIS 7 sunucunuzda test etmek yararlı olur. ASP.NET uygulamalar için IIS ayarını etkinleştirmek için bu Web Platformu Yükleyicisi bağlantısını kullanabilirsiniz. Aşağıdaki dağıtım bağlantılarına bakın:

Şimdi ASP.NET MVC Uygulaması ve MVC Müzik Mağazası öğreticileri için ara düzey Entity Framework Veri Modeli Oluşturma, MSDN'deki ASP.NET makalelerini keşfetme ve ASP.NET MVC hakkında daha fazla bilgi edinmek için adresinden https://asp.net/mvc birçok video ve kaynağa göz atmanızı tavsiye ediyorum! ASP.NET MVC forumları soru sormak için harika bir yerdir.

Keyfini çıkarın!

— Scott Hanselman (http://hanselman.com ve Twitter'da @shanselman ) ve Rick Anderson blogs.msdn.com/rickAndy