Asp.Net MVC İle İletişim Formu Hazırlamak

  • Haziran 6, 2016
  • /
  • Yorum Yok

     Yaptığımız birçok projede iletişim formuna ihtiyaç duyarız. MVC ve Entity Framework kullanarak basit bir iletişim formu hazırlayalım. Kullanıcı "Gönder" butonuna tıkladığında forma girdiği dataları form tag'i ile yakalayıp backend'e göndereceğiz. Backend tarafında ise önce Entity Framework kullanarak form datasını veritabanına kaydedeceğiz; ardından mail göndereceğiz.

     Visual Studio'da yeni proje oluşturalım. Proje tipi olarak "ASP.NET Web Application" seçeceğiz.

Asp.Net Web Application İletişim Formu

     Daha sonra gelen pencerede template olarak "Empty" seçip, MVC seçeneğini işaretliyoruz ve devam ediyoruz.

Web Application Mvc Template

     Visual Studio'da boş bir MVC projesi oluşturuldu. Projeye HomeController adında bir controller ve bu controller'a ait Index adında bir View oluşturuyorum.

     View tarafına form elementini de içeren HTML kodlarını; controller tarafına ise, girilen dataları veritabanına kaydeden ve mail gönderen C# kodlarını yazacağız.Önce HTML kodlarını içeren View tarafına bakalım :     

@using (Html.BeginForm("Send", "Home", FormMethod.Post, new { @class = "form-horizontal", enctype = "multipart/form-data" }))
{
    <div id="contactForm">
        <div class="form-body">
            <div class="row">
                <div class="col-md-12">
                    <div class="form-group">
                        <label class="control-label col-md-2">İsim Soyisim</label>
                        <div class="col-md-9">
                            <input type="text" name="name" required class="form-control" placeholder="İsim Soyisim" value="">
                        </div>
                    </div>
                </div>
            </div>
            <div class="row">
                <div class="col-md-12">
                    <div class="form-group">
                        <label class="control-label col-md-2">E-Mail</label>
                        <div class="col-md-9">
                            <input type="text" name="email" class="form-control" placeholder="E-Mail" value="">
                        </div>
                    </div>
                </div>
            </div>
            <div class="row">
                <div class="col-md-12">
                    <div class="form-group">
                        <label class="control-label col-md-2">Mesajınız</label>
                        <div class="col-md-9" style="padding-top: 7px;">
                            <textarea name="message" required class="form-control" placeholder="Mesajınız" value=""></textarea> 
                        </div>
                    </div>
                </div>
            </div>
            <!--/row-->
        </div>
        <div class="form-actions">
            <div class="row">
                <div class="col-md-12">
                    <div class="col-md-offset-10 col-md-9">
                        <button type="submit" class="btn">Gönder</button>
                    </div>
                </div>
            </div>
        </div>
    </div>
}

     Burada form elementinin tanımındaki "Send" ve "Home", form submit edildiğinde HomeController'daki Send isimli methodun tetikleneceğini belirtir. İletişim formunda 3 adet bilgi alıyoruz kullanıcıdan; İsim soyisim, e-mail ve mesaj. Input'ların name property'leri önemli, kullanıcının bu inputlara girdiği datalara name'ler aracılığıyla erişeceğiz. İletişim formunun görüntüsü aşağıdaki gibi oluşuyor.

Mvc İletişim Formu

     HomeController'daki Send methodu, FormCollection tipinde parametre alır. Form'da kullanıcının girdiği datalara bu FormCollection tipindeki parametre aracılığıyla ulaşırız. Kullanıcının inputlara girdiği dataları önce Entity Framework kullanarak ContactForm tablosuna kaydedeceğiz. Daha sonra da bir mail adresine aynı dataları mail göndereceğiz.     

public ActionResult Send(FormCollection collection)
{
    MvcDbContext dbcon = new MvcDbContext();
    ContactForm cf = new ContactForm();
    cf.AddedDate = DateTime.Now;
    cf.Email = collection["email"];
    cf.IsActive = true;
    cf.Message = collection["message"];
    cf.Name = collection["name"];

    dbcon.ContactForm.Add(cf);
    if (dbcon.SaveChanges() > 0)
    {
        //ContactForm tablosuna kayıt başarılı. Mail gönderilebilir.
        MailMessage mail = new MailMessage();
        mail.To.Add("mail@deneme.com");  //mail gönderilen adres
        mail.From = new MailAddress("no-replay@deneme.com");  //maili gönderen adres
        mail.Subject = "İletişim Formu";
        string Body = "İsim Soyisim : " + collection["name"] + " </br>E-Mail : " + collection["email"] + " </br>Message : " + collection["message"];
        mail.Body = Body;
        mail.IsBodyHtml = true;
        SmtpClient smtp = new SmtpClient();
        smtp.Host = "mail.deneme.com";  //mail serverının host bilgisi
        smtp.Port = 587;  //mail serverının portu
        smtp.UseDefaultCredentials = false;
        smtp.Credentials = new System.Net.NetworkCredential("no-replay@deneme.com""şifre");  //mail serverının kullanıcı bilgileri
        smtp.Send(mail);
    }

    return RedirectToAction("Index");
}

     Yukarıda da bahsettiğim gibi, Send methodunun parametre kabul ettiği FormCollection tipindeki değişken aracılığıyla kullanıcının inputlara girdiği datalara erişiyoruz. Örneğin collection["email"] kod cümleciği, bize ismi "email" olan inputa girilmiş değeri verir. Entity Framework kullanarak ContactForm tablosuna kayıt yapıyoruz. "dbcon.SaveChanges()" methodu, veritabanında yapılan değişiklikleri kaydetmemizi sağlar ve değiştirilen kayıt sayısını çevirir. Yani "dbcon.SaveChanges() > 0" ise, kayıt başarılı olmuş demektir. Bu durumda da e-mail gönderiyoruz.

YORUMLAR
ahmet
Şubat 15, 2018 15:22
merhaba hazır yapılmış olarak indirme linki koyabilirmisin
Aslı Sönmez
Ocak 16, 2017 15:51
Çok faydalı ve açıklayıcı bir makale olmuş, çok teşekkür ederim. Makalelerinizin devamını bekliyorum
Email Adresi *
Görüntülenecek İsim *
Yorum *
Paylaş
  • f