Skip to content

Asp.Net Mvc'de Html Formu Post Ettirmek

[.k3] edited this page Apr 9, 2019 · 6 revisions

Post Etmek Nedir?

Post işlemini örnekle açıklarsak bir siteye girdiğinizde kayıt ol kısmına geldiniz ve verileri girdiniz. Daha sonra en altta kaydet-ok gibi bir buton olur o butona basınca formda girdiğiniz veriler belirlediğiniz Controller ve Action'a gelir. Daha sonra kayıt işlemini modele atıp modeli db'ye gönderip kullanıcıyı kayıt edebilirsiniz.

Post İşlemi Nasıl Olur?

İlk olarak bir html form oluşturursunuz (yani textboxların olduğu bir alan) daha sonra o formun Viewdaki Front End(html) kısmını yazdıktan sonra post Action'u yapmamız gerekir. Post Actionu şu işe yarar kullanıcı formdaki verileri doldurduktan sonra kaydet butonuna basınca verilerin geleceği alandır.

Html Tasarımım Ve Butonun Post Etme Özelliğini Tanımlarken Neye Dikkat Etmeliyim?

Form tasarlarken genelde Bootsrap Css kütüphanesini kullanırız. Bu bizi bir çok işlemden Responsive yapıda kayma derdinden vs kurtarır. Örnek kullanıcının formdaki tüm alanları doldurmasını istiyorsanız eğer yapacağınız iş html içerisine Required koymaktır.

<input class="form-control" name="text" type="text" required>

Daha önemlisi Html'de post ederken bir textbox'un değerini almak istersek o textbox'a name vermeliyiz name vermezsek o veri gelmez ve parametre olarak actionumuz'a null bir değer gelir.

Örnek Htmlde bir kullanıcı kayıt formu oluşturunuz ve bu kayıt formunu bir database'e yazınız. EntityFramework ile gelen formu kayıt ediniz.

Öncelikle Veritabanını Çözerek İşe Başlayalım

Create Database PostMvc Database oluşturdum.

Use PostMvc PostMvc Database'ini kullan demek istedim.

Create table AppUser(AppUserId int identity Primary Key,UserName nvarchar(50),Password nvarchar(50),Email nvarchar(50),IsActive bit,IsDeleted bit) tablomu EntityFramework'e uygun şekilde oluşturdum.

Daha Sonra Projemi Oluşturup Modelimi Ekliyorum

Dikkat Edilmesi Gereken Konular

Öncelikle Html de input text alanlarını yaparken bunlara Name vermeliyiz o nameleri Action parametresinde çekeceğiz ve kullanacağız.

Diğer bir husus post ederken form taginin eklemeyi unutmayın. Biz Mvcnin Helperları ile @Html.BeginForm şeklinde yazıyoruz bunu yazmazsak form hiç bir şekilde Action'a gitmez dolaşıp dururuz :)

Modelimi Oluşturdum

Şimdi Bir Controller Ve İçerisinde Action Oluşturacağım

Unutmadan Post işlemi için bize 2 adet Action gerekiyor. Sebebi 1.Action kullanıcıya View'i yani görüntüyü gösterecek 2.Action ise Post için kullanılacak.

Şimdi burada gördüğünüz gibi view döndüren bir Register Actionu açtım. Ona bir de view açacağım.

View'a geldiğimde bir html tasarımı oluşturacağım bunu da bootstrap'ın yardımı ile hızlı bir şekilde hem güzel bir görüntü yakalayarak yapacağız.

Gördüğünüz gibi klasik html bilgim ile bootsrap'ın classlarını kullandım. Burada dikkat etmeniz gereken şey textboxların namelerini kesinlikle vermeyi unutmuyoruz. Bu nameleri vermezsek action da formda yazdığınız şeyi yakalayamazsınız null gelir.

Ayrıca required kullanma sebebim eğer boş geçilmesini istemediğim bir alansa izin vermiyor butona basınca kullanıcı lütfen bu alanı doldurun tarzından yazı çıkıyor.

Son olarak butonun type'ı submit olmalı submit olmazsa o buton çalışmayacak ve hiç bir iş yapmayacaktır.

Gördüğünüz üzere tasarımımız ortaya çıktı boostrap sayesinde gayet şık bir görüntü elde ettik. Hiç de bir şey yapmadık zaten default tasarımda boostrap hazır geldiği için biz bir şey yapmadan sadece kütüphaneleri çağırıp kullandık.

Şimdi Post Actionumuzu Yazalım


Gördüğünüz gibi Post Actionu'nuna parametre verdim o da inputlar daki textbox'un nameleri bunları birazdan kullanıp database'e kaydedeceğiz.

Burada Post Actionu'nu açmadan önce ilk Action'ın hemen üstüne [HttpGet] ekliyorum bunun sebebi şimdi açacağım Post Action'u ile aynı isimde koyacağım için post metodumun başına [HttpPost] 'u ekliyorum. Eğer [HttpGet] ve [HttpPost] 'u eklemeseydim site açılırken hata verecekti çünkü ikisi de aynı, hangi actiona gireyim gibi bir şey diyecekti.

Gördüğünüz gibi EntityFramework ile kaydetme işlemini yazdım inputtdaki verileri parametre olarak aldım şimdi tekrardan html kısma gelip formu Action'a bağlayacağız.

View'a döndüğümde Register Actionu'muza Post edebilmemiz için @using (Html.BeginForm("Register", "Home", FormMethod.Post)) yani Html.Helper ile form tagi oluşturmuş olduk.

<form action="~/Home/Register" method="post"></form> bu şekilde de post ettirebilirdik ancak bu şekilde html yazmış olacaktı olası domain değişme veya proje bir klasör ileri gittiğinde yolda bir sıkıntı olabilirdi ancak Html.Beginform da böyle bir sıkıntı olmaz.

Bu arada her Html helper kullanırken using kullanılmaz using işlemi "1 kere çalış ve sonra bir daha sunucuda bellekte yer bırakma" anlamına gelmektedir.

Şimdi çalıştırıp debug yöntemi ile sonucu görelim.

Burada gördüğünüz gibi inputtan Name'e verilen isimleri parametrede string olarak çağırınca textboxa yazdığımız veriler gelmiş oluyor.

Ayrıca sayfa bir yere yönlendirdi o da çalışmadı yönlendirme işlemini yapan return RedirectToAction("Index","Home"); Home Controllerin Index Action'una Gitti. bizde olmadığı içinde o indexin View'ı hata vermiş oldu. Boş bıraktığımızda required'ın boş alandaki kısımıda hata verdiğini gördünüz (Benim bilgisayarım İngilizce olduğu için hata İngilizce)

Konun Projesi

MvcOrnek5PostKonusu