Asp.Net MVC projelerinde verileri Txt dosyası olarak alma işleminin nasıl yapıldığını öğrenelim.
Bu işlemi örnek bir uygulama üzerinden gerçekleştirelim. Uygulamamızda öncelikle Urun isminde bir class tanımlayalım ve bu sınıf türünden ürünleri tanımlayalım.
Ürünün Id, Ad, Fiyat ve Adet (stok miktarı) bilgilerinin bulunduğu Urun sınıfını oluşturalım.
public class Urun { public int Id { get; set; } public string Ad { get; set; } public double Fiyat { get; set; } public int Adet { get; set; } }
Ürün bilgilerimizi Veri isminde bir sınıf içerisinde static olarak tanımlayalım.
public class Veri { private static List<Urun> _urunler = new List<Urun>() { new Urun{ Id = 1, Ad = "Masaustu Bilgisayar", Fiyat = 1200, Adet = 20}, new Urun{ Id = 2, Ad = "Laptop", Fiyat = 2000, Adet = 40}, new Urun{ Id = 3, Ad = "Tablet", Fiyat = 800, Adet = 65}, new Urun{ Id = 4, Ad = "SmartPhone", Fiyat = 1450, Adet = 230}, new Urun{ Id = 5, Ad = "LCD TV", Fiyat = 1100, Adet = 55}, new Urun{ Id = 6, Ad = "LED TV", Fiyat = 2200, Adet = 90}, new Urun{ Id = 7, Ad = "Flat TV", Fiyat = 700, Adet = 30} }; }
Projemizde HomeController içine UrunleriTxtyeAktar isminde bir Action ve View’ını oluşturalım.
public ActionResult UrunleriTxtyeAktar() { return View(); }
Sayfa üzerine Excel’e aktarım işlemini tetikleyecek olan input > button kontrolünü ekleyelim. Kontrolün altına sonuçları üzerine ekleyeceğimiz bir div ekleyelim.
<input id="btTxtyeAktar" type="button" value="TXT'ye Aktar" /> <div id="sonuc"></div>
Butona tıklandığında bir iframe oluşturalım. iframe içerisinde, (birazdan oluşturacağımız) verileri Excel’e aktaracak olan View’ı (Home/TxtOlustur) sonuc isimli div üzerinde görüntüleyeceğiz. Tetikleme işlemi için Jquery ile btTxtyeAktar butonuna click olayını ekleyelim.
<script type="text/javascript"> $(function () { $("#btTxtyeAktar").on("click", function () { $('<iframe src="/Home/TxtOlustur"></iframe>').appendTo('#sonuc').hide(); }); }); </script>
Şimdi HomeController içerisine TxtOlustur isimli Action’ı ekleyelim.
public ActionResult ExcelOlustur() { return View(Veri.Urunler); }
Oluşturduğumuz actionın View’ını ekleyelim : Views > Home > ExcelOlustur.cshtml
View içerisinde Model’deki verileri, her ürün kaydı için bir satır olacak şekilde, değerleri virgül ile ayırarak listeleyelim.
Öncelikle TxtOlustur sayfası içindeki verilerin Txt dosyası olabilmesi için sayfanın headerlarını değiştirmemiz gerekmektedir.
Response.AddHeader("content-disposition", "attachment; filename=urunler.txt"); Response.ContentType = "application/octet-stream";
Şimdi modeldeki (urunler) verileri sonuc ismindeki string bir değişkene satır satır ekleyelim. Alt satıra geçmek için Environment.NewLine özelliğini kullanacağız.
var urunler =Model; string sonuc = ""; foreach (Makale.MVCWebGrid.Urun urun in urunler) { sonuc += urun.Id + "," + urun.Ad + "," + urun.Adet + "," + urun.Fiyat + "TL" + Environment.NewLine; }
Son olarak sonuc değerini ekranda yazdıralım.
@sonuc
TxtOlustur.cshtml sayfasının tüm kodları:
@{ Layout = null; Response.AddHeader("content-disposition", "attachment; filename=urunler.txt"); Response.ContentType = "application/octet-stream"; var urunler =Model; string sonuc = ""; foreach (Makale.MVCWebGrid.Urun urun in urunler) { sonuc += urun.Id + "," + urun.Ad + "," + urun.Adet + "," + urun.Fiyat + "TL" + Environment.NewLine; } }
Projeyi çalıştırıp Home/UrunleriTxtyeAktar sayfasından Txt’ye aktar butonuna tıkladığınızda tarayıcının (header içinde tanımladığımız) urunler.txt dosyasını indirmeye çalıştığını göreceksiniz.
İndirilen txt dosyası aşağıdaki gibi görünecektir.
Yepyeni makalelerde görüşmek dileğiyle...
Veysel Uğur KIZMAZ
Bilgisayar Mühendisi
veysel@ugurkizmaz.com
www.ugurkizmaz.com