7 Eylül 2018 Cuma

ASP.NET MVC MaskedTextBox Kullanımı

Mvc'de masked Input kullanılabilmesi için ilk olarak projeye iki script dahil edilmelidir.

Bunlar; jquery-1.8.3.min.js ve jquery.maskedinput.min.js

İndirme Linki: http://s7.dosya.tc/server9/ou9n4k/masked.rar.html

Örnekte telefon numarası için masked kullanılmıştır.

View 
id = "phone" kısmına dikkat edilmeli. Buraya verdiğimiz isme göre sayfada javascript çağırılacak.
<div class="form-group">
                    <label>Telefon Numaranız</label>
                    @Html.TextBoxFor(a => a.telefon, new { @class = "form-control", @type = "text", id = "phone" })
                </div>


Javascript

İndirilen javascript dosyaları projeye dahil edilmeli. Phone id'li textbox yakalanır ve mask özelliği belirlenir. "999/999/9999" telefon için kullanılmıştır, farklı versiyonları kullanılabilir. Mask'ın içine yazılan şema geçerli olacaktır.



<script src="~/Content/Js/masked/jquery-1.8.3.min.js"></script>
<script src="~/Content/Js/masked/jquery.maskedinput.min.js"></script>
<script type="text/javascript">
jQuery(function($){
   $("#phone").mask("999/999/9999");
});
</script>



Paylaş:

Birbirine Bağlı Dropdown Kullanımı MVC

Örnek uygulamada ile göre ilçe seçtirilerek kullanıcının ikametgarhId bilgisine ilçeıd yazdırılması gösterilmiştir. Birbirine bağlı dropdown kullanımına örnektir.


View

İlçe dropdown'unda " @Id = "ikametgahId"" kısmına dikkat edilmelidir. Buraya verceğimiz id'yi sayfanın altında javascritte kullanacağız.
Şehir drop'unda ise controller tarafında tanımladığımız ViewBag.SehirList'i çağırıyoruz.

  <div class="form-group col-md-6">
                    <div class="editor-label">
                        <br />
                        @Html.Label("Şehir")<br />
                    </div>
                    <div>
                   
                        @Html.DropDownList("Sehir", (IEnumerable<SelectListItem>)ViewBag.SehirList, "-- Şehir Seçiniz  --", new { style = "width:250px" })
                    </div>
                    <div class="editor-label">
                        <br />
                        @Html.Label("İlçe")<br />
                    </div>
                    <div>

                        @Html.DropDownListFor(x => x.ikametgahId, new SelectList(string.Empty, "Value", "Text"), "-- İlçe Seçiniz --",
               new { style = "width:250px", @Id = "ikametgahId" })
                    </div>
                </div>

View'de kullanılacak olan script


<script type="text/javascript">
    $(document).ready(function () {
        //Şehir seçilince
        $("#Sehir").change(function () {
            $("#ikametgahId").empty();
            $.ajax({
                type: 'POST',
                url: '@Url.Action("Ilce")', // İlçe metoduna git
                dataType: 'json',
                data: { id: $("#Sehir").val() },
                // Sehir id'ye göre veri getir.

                success: function (states) {
                    $.each(states, function (i, state) {
                        $("#ikametgahId").append('<option value="' + state.Value + '">' +
                             state.Text + '</option>');
                    });
                },
                error: function (ex) {
                    alert('Veri bulunamadı.' + ex);
                }
            });
            return false;
        })
    });
</script>


Controller

Controllerde dikkat edilmesi gereken noktalar,

1-Dış dropdown olan il için tanımlı actionda doldurma verisinin ayarlanması (ViewBag.SehirList).
2-İç dropdown olan ilçe için ilçe ve ilçegetir metotlarının tanımlanması.
.

        public JsonResult Ilce(string id)
        {
            List<SelectListItem> ilceler = new List<SelectListItem>();
            var ilceList = this.IlceGetir(Convert.ToInt32(id));
            var ilceData = ilceList.Select(m => new SelectListItem()
            {
                Text = m.IlceName,
                Value = m.Id.ToString(),
            });
            return Json(ilceData, JsonRequestBehavior.AllowGet);
        }

        public IList<Ilce> IlceGetir(int id)
        {
            return db.Ilces.Where(m => m.SehirId == id).ToList();
        }


        public ActionResult ProfilDuzenle(int id)
        {


            ViewBag.SehirList = new SelectList(db.Sehirs.Select(l => new
            {
                l.Id,
                l.SehirName

            }), "Id", "SehirName");

            Uye u = db.Uyes.Where(x => x.UyeID == id).SingleOrDefault();
            return View(u);
        }







Paylaş:

4 Eylül 2018 Salı

MVC Çoklu Resim Ekleme

MVC projelerinde çoklu resim ekleme kodları aşağıda yer almaktadır.

 View  

 <input type="file" name="resimDeneme" multiple="multiple" class="form-control" />
 <button type="submit" value="Yukle" class="btn green">Kaydet</button>

Dikkat edilmesi gereken iki kısım bulunmakta. İlk olarak "name" özelliği, ikinci olarak çoklu resim ekleyeceğimizi belirten multiple="multiple" .

Controller



 [HttpPost]
        public ActionResult ResimEkle(HttpPostedFileBase[] resimDeneme)
        {
         
            if (resimDeneme != null)
            {

                try
                {
                    foreach (HttpPostedFileBase item in resimDeneme)
                    {
                        string dosyaAdi = Guid.NewGuid().ToString() + Path.GetExtension(item.FileName);
                        item.SaveAs(Server.MapPath("~/Content/Resimler/") + dosyaAdi);
                        Resim rs = new Resim();
                        rs.resimAd = dosyaAdi;
                       
                        db.Resims.Add(rs);
                       
                        db.SaveChanges();
                    }
                   
                }
                catch (Exception)
                {
                 
                }

                return Redirect("/Resim/Index" );
            }

Controller kısmındaki HttpPostedFileBase[] bize bir resim dizisinin geleceğini gösteriyor. resimDeneme ise dizinin ismi ve View'de  belirttiğimiz class'a verdiğimiz isimle aynı olmalı.

Daha sonra liste dolu mu ona bakıyoruz ve listenin elemanlarını foreach ile tek tek kaydediyoruz.  Guid.NewGuid()  resimleri  tekrar isimlendirmek için kullanılan bir yapı. İstenirse kullanılmayıp sadece item.Filename kullanılabilir.






Paylaş:

17 Ağustos 2018 Cuma

Mvc Excel Çıktısı Alma ve Türkçe Karakter Sorunu Çözümü


MVC'de pratik bir şekilde excel çıktı alma kodları aşağıdadır. Yapılması gereken veriyi seçmek ve giridlere doldurmaktan ibarettir. Ayrıca kullanıcıların çoğu Türkçe karakter sorunu yaşamakta. Yazıda Türkçe karakter sorununun giderilme yoluna da örnek verilmiştir.

View:

 <a class=" btn btn-circle green btn-outline btn-sm"               
 href="/Sugar/GridExportToExcel/@id" 
Excel Çıktısı</a>

Controller:


public ActionResult GridExportToExcel(int id)  
        {

            Kullanici k=DB.EF.Kullanici.Where(x=>x.kullaniciID==id).SingleOrDefault();  
                string dosyaAdi = "Şeker Ölçüm Değerleri "+k.kullaniciAd + k.kullaniciSoyad;
               
//Exceli dolduracak veri oluşturulur

 var table = DB.EF.SekerOlcum.Where(x => x.kullaniciId == id).Select(x=> new { x.Kullanici.kullaniciAd, x.Kullanici.kullaniciSoyad,x.olcumTur,x.tarih
                }).ToList();
                var grid = new GridView();
                grid.DataSource = table;
                grid.DataBind();

                Response.ClearContent();

//Excel Dosya adı belirlenir

                Response.AddHeader("content-disposition", string.Format("attachment; filename=" + dosyaAdi + ".xls"));

                Response.ContentType = "application/ms-excel";
//Türkçe karakter sorunu varsa kullanılır.

Response.ContentEncoding = System.Text.Encoding.Unicode;
                Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());

                StringWriter sw = new StringWriter();
                HtmlTextWriter htw = new HtmlTextWriter(sw);

                grid.RenderControl(htw);

                Response.Write(sw.ToString());
                Response.End();
                return View();
        }

Paylaş:

7 Ağustos 2018 Salı

Forms Authentication - MVC Login Kontrolü

Forms Authentication kısaca form doğrulama mekanızması olarak düşünülebilir. MVC projelerinde cookie kullanılacağında bu yapıya başvurulması gerekmektedir.

Login işlemi gerçekleştiğinde kullanıcı adı ve şifre doğru ise aşağıdaki kod satırı ile cokie'ye kullanıcının bilgileri atılabilir. Örnekte giriş yapan kullanıcının eposta adresi kullanılmıştır.

FormsAuthentication.SetAuthCookie(eposta, true);


Ardından session controlünün yapılacağı bir filter class oluşturulmalıdır. Bu sayede üye girişi isteyen actionlar kontrol edilebilir hala gelecektir.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace xxxx
{
    public class _SessionController
    {

    }

    class _SessionControlAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (!HttpContext.Current.User.Identity.IsAuthenticated)
            {
                if (!HttpContext.Current.Response.IsRequestBeingRedirected)
                    filterContext.HttpContext.Response.Redirect("/Giris/Index");

            }

        }
    }

}

Giriş kontrol işlemleri tamamlandı. Fakat bu haliyle proje çalıştırıldığında   "HttpContext.Current.User.Identity.IsAuthenticated" sürekli boş olarak gelecektir ve giriş bilgileri doğru olsa bile giriş if'in içerisine girerek sizi giriş ekranına yönlendirecektir. Bunun çözümü ise webconfig ayarlarıyla olmaktadır.


<system.web>
    <authentication mode="Forms">
      <forms loginUrl="~/Giris/Index/" timeout="2880"/>
    </authentication>
  </system.web>

Bu ayardaki loginUrl; giriş sayfası, timeout ise cookinin bellekte tutulma süresidir. Authentication yapısının çalışması için bu özelliklerin tanımlanması zorunludur.

Çıkış işlemi için ise yine bu yapının sağladığı yardımı ile  cookiye son verilmektedir. Sadece action içine aşağıdaki satırın yazılması ve gerekli yönlendirmenin yapılması yeterlidir.


 FormsAuthentication.SignOut();

Authentication yapısı burada anlatılandan daha komplike ve tüm isteklerinizi karşılayacak bir yapı. ol yönetiminde kullanılan location gibi daha bir çok özelliği yer almaktadır. Bunlara göz atabilirsiniz.
Paylaş:

FastReport ile İki Sütunlu Rapor Oluşturma

Merhaba bir fastreport çalışmam sırasında birden çok sütunlu bir raporlama sayfası oluşturmam gerekti. Bu yazımda çok sütunlu bir raporlama sayfasının nasıl oluşturulacağını göstermeye çalışacağım.



İlk olarak klasik rapor oluşturma adımlarını takip ediyoruz ve raporumuz  için bir veri kaynağı seçiyoruz.  Benim seçtiğim veri kaynağında Soru isimli bir tablo bulunmakta. Bu örnekte tablodan gelen verileri iki sütunlu bir şekilde listelemeye çalışacağız. Raporda çekilecek columları ve yerleştirmelerini yapıyoruz. Biz şuanlık sadece soru içeriklerini çekeceğiz.


Raporun tek sütunlu görünümü şu şekilde olacaktır. Bizim amacımız sütun sayısını ikiye çıkarmak yani soruları yan yana dizmek.


Bunun için sayfanın üstündeki  page setup alanından ayarlama yapmamız gerekiyor.
Page setupta iki sütunlu bir raporlama için column count'unu 2 yapmamız gerekiyor.

Bu sayede sayfa sütun sayısı ikiye çıkmış oluyor. Normalde 4.soru yeni sayfaya geçecekti fakat sütun sayısını  ikiye çıkardığımız için yan taraftan listelenmeye devam etti.



Paylaş:

26 Aralık 2017 Salı

Parametreli Rapor Oluşturma (FastReport)

Raporlama işlemlerinde bazı durumlarda parametre kullanmak gerebiliyor(id'ye göre ya da belirli bir sutuna göre veri getireceksek). Bu durumlarda fastreportta paremetre kullanımının nasıl olacağı anlatılacaktır.

Fastreportta normal bir raporun nasıl tasarlanağı önceki yazımda belirtmiştim. Sorgu sihirbazından sorgu oluştururken bu sefer where ifadesinden sonra hangi paremetreye göre düzenleme yapacaksak onu belirtiyoruz. Örnekte ogrenciID'ye göre sorgulama yapılmıştır.


Bir sonraki adımda parametrelerimizi belirleyeceğimiz pencere açılacaktır. Bu pencerede alanları şekildeki gibi doldurmalıyız. 


Bundan sonraki adımlar normal rapor tasarlamayla aynıdır. Raporun kodundaki görünüm şu şekilde olmalıdır. Burada sorgumuzu ve ogrenciId isimli paremetremizi görebiliyoruz.



  <MsSqlDataConnection Name="Connection" ConnectionString="rijcmlq+rW0RkboK+/8CKGGYUID3ctBV8q9SvKYxl3iiE7vBnh7Tgou0+4WFf3NfmPSvHVFXQXAfsTr/dRRdNAqxQpM/oTEI/2kQMOdiK8+QLPN4CnjmnBHFqhlpALlSNrvKzLmFPIQPbnjQDXWE47A4sszcSmcdCb7AVnUdeQeklQgeOvDJv1owtTl8hxQj5f7awO/">
      <TableDataSource Name="Table" Alias="Deneme" DataType="System.Int32" Enabled="true" SelectCommand="SELECT O.ogrenciAd, O.ogrenciSoyad&#13;&#10;FROM &quot;Ogrenci&quot; O where O.ogrenciID=@ogrenciAd&#13;&#10;">
        <Column Name="ogrenciAd" DataType="System.String"/>
        <Column Name="ogrenciSoyad" DataType="System.String"/>
        <CommandParameter Name="@ogrenciId" DataType="22" Expression="[Parameter]"/>
      </TableDataSource>
    </MsSqlDataConnection>


Rapor için kullanılan kod parçacığı ise şu şekildedir.



public partial class deneme : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            int ogrenciId = 1;
            object[,] icerik = { { "@ogrenciId", ogrenciId } };
            //icerik ile store pr. üzerinden datatable'ımızı dolduruyoruz. 
            DataTable odemePlani = Erdi.SP.tablo_getir(icerik, "deneme");
            using (var r = new Report())
            {
                r.SetReport(r);
                r.Load(Server.MapPath("~/Content/Dosyalar/Cikti/isimsiz.frx"));
                r.RegisterData(odemePlani, "Deneme");
                r.Prepare();

                FastReport.Export.Pdf.PDFExport pdf = new FastReport.Export.Pdf.PDFExport();

                using (MemoryStream m = new MemoryStream())
                {
                    r.Export(pdf, m);

                    Response.ClearContent();
                    Response.ClearHeaders();
                    Response.Buffer = true;
                    Response.ContentType = "Application/PDF";
                    Response.AddHeader("content-disposition", "inline; filename=" + " - Deneme.pdf");

                    m.Position = 0;
                    m.WriteTo(Response.OutputStream);
                    Response.End();
                }
            }
           
        }
    }



Bu örnekte FastReport ile veritabanımızdaki id'si 1 olan kullanıcıların listelenmesi sağlanmıştır. Dışarıdan gelen bir parametreye göre fastreportta veri aktarımı gerçekleştirilmiştir.
Paylaş: