BAĞLANTILARIM

Takip Edin:

C# etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
C# etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
0

ASP.NET MVC CONTROLLERDAN BAŞKA BİR CONTROLLER İÇİNDEKİ METHODU ÇAĞIRMA

Çarşamba, Temmuz 10, 2019 / / , ,

Asp.Net Mvc ile Başka Bir Controller İçindeki Fonksiyonu Çağırma


var controller = DependencyResolver.Current.GetService<HomeController>();
            controller.ControllerContext = new ControllerContext(this.Request.RequestContext, controller);
            //methodu çağır
            ActionInvoker.InvokeAction(controller.ControllerContext, "Index");

0

ASP.NET C# İLE MAİL GÖNDERİRKEN BASE64 TİPİNDEKİ İMAJLARIN GÖRÜNMEMESİ

Salı, Nisan 16, 2019 / / , , , ,

C# ile mail gönderilirken eğer göndereceğiniz mail içinde base64 tipinde gömülmüş görselleriniz varsa, bu imajların alıcılar tarafından görüntülenebilmesi için AlternatifeView oluşturulabilir. Uygulamanın kullanımı aşağıdadır.

private static AlternateView ContentToAlternateView(string content)
    {
        var imgCount = 0;
        List<LinkedResource> resourceCollection = new List<LinkedResource>();
        foreach (Match m in Regex.Matches(content, "<img(?<value>.*?)>"))
        {
            imgCount++;
            var imgContent = m.Groups["value"].Value;
            string type = Regex.Match(imgContent, ":(?<type>.*?);base64,").Groups["type"].Value;
            string base64 = Regex.Match(imgContent, "base64,(?<base64>.*?)\"").Groups["base64"].Value;
            if (String.IsNullOrEmpty(type) || String.IsNullOrEmpty(base64))
            {
                //ignore replacement when match normal <img> tag
                continue;
            }
            var replacement = " src=\"cid:" + imgCount + "\"";
            content = content.Replace(imgContent, replacement);
            var tempResource = new LinkedResource(Base64ToImageStream(base64), new ContentType(type))
            {
                ContentId = imgCount.ToString()
            };
            resourceCollection.Add(tempResource);
        }
        AlternateView alternateView = AlternateView.CreateAlternateViewFromString(content, null, MediaTypeNames.Text.Html);
        foreach (var item in resourceCollection)
        {
            alternateView.LinkedResources.Add(item);
        }
        return alternateView;
    }


public static Stream Base64ToImageStream(string base64String)
    {
        byte[] imageBytes = Convert.FromBase64String(base64String);
        MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
        return ms;
    }


Üretilen Alternatif Görünümün mail gönderim fonksiyonu içinde örnek kullanımı:
.....
mail.Priority = MailPriority.High;
mail.Subject = mailBaslik;
mail.AlternateViews.Add(alternatifGorunum);
...


Detaylı kaynak için :

https://stackoverflow.com/questions/39407474/add-attachment-base64-image-in-mailmessage-and-read-it-in-html-body

0

ASP.NET PUBLISH ZAMANINI SİTEDE GÖSTERMEK

Perşembe, Kasım 29, 2018 / / , , ,

Aşağıdaki Razor kodu kullanılarak projenin publish edildiği zaman yakalanabiliyor.

Not: Dosyaları yüklerken sunucudaki bin klasörünü silip yenisini yüklemek gerekti. Üzerine yazılsın şeklinde aktarıldığında etkili olmadı.

@File.GetCreationTime(ViewContext.Controller.GetType().Assembly.Location)

0

C# ASP.NET İLE ZİYARETÇİNİN DİLİNİ BULMAK

Salı, Ekim 23, 2018 / / , ,

Çoklu dil desteği bulunan web sitelerinde ziyaretçilerin hangi dilde karşılanacağı aşağıdaki şekilde ayarlanabilir.

System.Globalization.CultureInfo kultur = System.Threading.Thread.CurrentThread.CurrentUICulture;
string kulturDilKod = kultur.TwoLetterISOLanguageName;

Web.config dosyasına aşağıdaki bilgiyi eklemek gerekiyor.

<system.web>   
     <globalization culture="auto" uiCulture="auto"/>
</system.web>

0

ASP.NET MVC'DE DATATABLES BİLEŞENİ VE AJAX SUNUCU TARAFLI SAYFALAMA SERVER SIDE PAGING

Perşembe, Ekim 18, 2018 / / , , , , ,

Asp.net MVC ile geliştirilen projede Datatables bileşeni kullanarak server side sunucu taraflı sayfalama yaptırmak için aşağıdaki kodlar kullanılabilir.

View tarafı

<table id="dataTablo" class="table table-hover table-checkable dataTable no-footer dtr-inline">
    <thead>
        <tr>
            <th>İşlem</th>
            <th>OdaAd</th>
            <th>Ad Soyad</th>
            <th>Eposta</th>
            <th>Telefon</th>
            <th>Durum</th>
        </tr>
    </thead>
</table>
--Jquery ilave edilmelidir
<link href="~/Content/assets/vendors/custom/datatables/datatables.bundle.css" rel="stylesheet" type="text/css" />
<script src="~/Content/assets/vendors/custom/datatables/datatables.bundle.js" type="text/javascript"></script>
<style type="text/css">
    @@media(max-width:670px) {
        .table {
            display: block;
            min-height: 300px;
            overflow-x: auto;
            width: 100% !important;
        }
    }
    .table > thead > tr > th {
        background-color: #f4f3f8;
        line-height: 28px;
        font-weight: 600;
    }
    tr:nth-child(even) {
        background-color: #faf9fc;
    }
    .dataTables_filter {
        float: left;
        margin-bottom: 20px;
    }
        .dataTables_filter input {
            background-color: #f4f5f8;
            border-color: #f4f5f8;
            color: #575962;
            padding: 18px;
            width: 272px;
            font-size: 13px;
        }
    .dataTables_paginate {
    display:inline-block;
    }
    .dataTables_length{
        float:right;
        display:inline-block;
    }
    .bottom{
        margin:34px;
    }
</style>

<script type="text/javascript">
    var oTable = $('#dataTablo').dataTable({
        "dom": '<"top">frt<"bottom">pl<"clear">',
        //"dom": '<f<t>pl>',
        "processing": true,
        "language": {
            //"url": "//cdn.datatables.net/plug-ins/1.10.20/i18n/Turkish.json"
            "sDecimal": ",",
            "sEmptyTable": "Tabloda herhangi bir veri mevcut değil",
            "sInfo": "_TOTAL_ kayıttan _START_ - _END_ arasındaki kayıtlar",
            "sInfoEmpty": "Kayıt yok",
            "sInfoFiltered": "(_MAX_ kayıt içerisinden bulunan)",
            "sInfoPostFix": "",
            "sInfoThousands": ".",
            "sLengthMenu": "Sayfada _MENU_ kayıt göster",
            "sLoadingRecords": "Yükleniyor...",
            "sProcessing": '<div class="m-loader m-loader--brand" style="width: 30px; display: inline-block;"></div>',
            "sSearch": "Ara:",
            "sZeroRecords": "Eşleşen kayıt bulunamadı",
            "oPaginate": {
                "sFirst": "İlk",
                "sLast": "Son"
                //"sNext": "Sonraki",
                //"sPrevious": "Önceki"
            },
            "oAria": {
                "sSortAscending": ": artan sütun sıralamasını aktifleştir",
                "sSortDescending": ": azalan sütun sıralamasını aktifleştir"
            },
            "select": {
                "rows": {
                    "_": "%d kayıt seçildi",
                    "0": "",
                    "1": "1 kayıt seçildi"
                }
            }
        },
        "bServerSide": true,
        "sAjaxSource": "/Uye/UyeListe",
        "sServerMethod": "POST",
       "aoColumns": [
            { "mData": "IslemText" , "orderable": false },
            { "mData": "Unvan" , "orderable": false },
            { "mData": "AdSoyad" },
            { "mData": "Eposta", "orderable": false },
            { "mData": "TelefonNo", "orderable": false},
            { "mData": "DurumText", "orderable": false}
        ]
    });
</script>


Controller tarafı

public string UyeListe(string sEcho, int iDisplayStart, int iDisplayLength, string sSearch, int iColumns, int iSortingCols, int iSortCol_0, string sSortDir_0, string sColumns)
        {
            object odaId = null;
            if (Convert.ToInt32(Session["KULLANICIROLID"]) >= 4)
            {
                odaId = Session["KULLANICIODAID"];
            }
            else
            {
                odaId = null;
            }
            var veri = Islem.Uye.Listele(odaId: odaId, durum: 1);
            sSearch = sSearch.ToLower();
            int totalRecord = veri.Count();
            var result = veri;
            if (!string.IsNullOrEmpty(sSearch))
            {
                result = veri.Where(x => x.AdSoyad.ToLower().Contains(sSearch) || x.Eposta.ToLower().Contains(sSearch)).OrderBy(a => a.UyeId).Skip(iDisplayStart).Take(iDisplayLength).ToList();
            }
            else
            {
                result = veri.OrderBy(x => x.UyeId).Skip(iDisplayStart).Take(iDisplayLength).ToList();
            }
            var sortColumnIndex = iSortCol_0;
            var sortDirection = sSortDir_0;
            if (sortColumnIndex == 2)
            {
                result = sortDirection == "asc" ? veri.OrderBy(x => x.AdSoyad).Skip(iDisplayStart).Take(iDisplayLength).ToList() : veri.OrderByDescending(x => x.AdSoyad).Skip(iDisplayStart).Take(iDisplayLength).ToList();
            }
            DataTable dtVeri = Helpers.Araclar.DataTableYap(result);         
            if (dtVeri != null)
            {
                for (int i = 0; i < dtVeri.Rows.Count; i++)
                {
                    DataRow dr = dtVeri.Rows[i];
                    string unvan = dr["Unvan"].ToString();
                    string dataOdaId = dr["OdaId"].ToString();
                    string uyeAdSoyad = dr["AdSoyad"].ToString();
                    string uyeId = dr["UyeId"].ToString();
                    string durum = "";
                    string islem = "";
                    if (Convert.ToInt32(dr["Durum"]) == 1)
                    {
                        durum = "<span class=\"m-badge m-badge--brand m-badge--wide\">Aktif</span>";
                    }
                    else
                    {
                        durum = "<span class=\"m-badge m-badge--danger m-badge--wide\">Pasif</span>";
                    }
                    dr["Unvan"] = "<span title=" + unvan + "\" style=\"width: 235px;\"><a href=\"/Oda/Detay/" + dataOdaId + "\" class=\"m-link\">" + unvan + "</a></span>";
                    dr["AdSoyad"] = "<span title=" + uyeAdSoyad + "\" style=\"width: 235px;\"><a href=\"/Uye/Detay/" + uyeId + "\" class=\"m-link\">" + uyeAdSoyad + "</a></span>";
                    dr["DurumText"] = durum;
                    islem += "<span style=\"overflow: visible; position: relative; width: 235px;\">";
                    islem += "<div class=\"dropdown\" style=\"display:inline-block\">";
                    islem += "<a href =\"#\" class=\"btn m-btn m-btn--hover-accent m-btn--icon m-btn--icon-only m-btn--pill\" data-toggle=\"dropdown\"><i class=\"la la-ellipsis-h\"></i></a>";
                    islem += "<div class=\"dropdown-menu dropdown-menu-right\">";
                    islem += "<a class=\"dropdown-item\" href=\"/Uye/Detay/"+uyeId+"\"><i class=\"la la-arrow-right\"></i>Detayı Gör</a>";
                    islem += "<a class=\"dropdown-item\" href=\"#\" data-toggle=\"modal\" data-target=\"#m_modal_4Yorum\" onclick=\"UyeNotEkle("+uyeId+");\"><i class=\"la la-comment-o\"></i> Not Ekle </a>";
                    islem += "<a class=\"dropdown-item\" href=\"#\" data-toggle=\"modal\" data-target=\"#m_modal_4UyeNot\" onclick=\"UyeNotu("+uyeId+");\"><i class=\"la la-comments\"></i> Notu Gör </a>";
                    islem += "<a class=\"dropdown-item\" href=\"#\" data-toggle=\"modal\" data-target=\"#m_modal_5UyeDosya\" onclick=\"UyeDosya("+uyeId+");\"><i class=\"la la-file-archive-o\"></i>Dosyalar </a>";
                    islem += "</div>";
                    islem += "</div>";
                    islem += "<a href =\"/Uye/Duzenle/"+uyeId+"\" class=\"m-portlet__nav-link btn m-btn m-btn--hover-accent m-btn--icon m-btn--icon-only m-btn--pill\" title=\"Düzenle\"><i class=\"la la-edit\"></i></a>";
                    islem += "</span>";
                    dr["IslemText"] = islem;
                }
            }
            result = Helpers.Araclar.ListeYap<Uye_Oda>(dtVeri);
            StringBuilder sb = new StringBuilder();
            sb.Clear();
            sb.Append("{");
            sb.Append("\"sEcho\": ");
            sb.Append(sEcho);
            sb.Append(",");
            sb.Append("\"iTotalRecords\": ");
            sb.Append(totalRecord);
            sb.Append(",");
            sb.Append("\"iTotalDisplayRecords\": ");
            sb.Append(totalRecord);
            sb.Append(",");
            sb.Append("\"aaData\": ");
            sb.Append(JsonConvert.SerializeObject(result));
            sb.Append("}");
            return sb.ToString();
        }

1

C# İLE YANDEX KURUMSAL EPOSTA ÜZERİNDEN MAIL GÖNDERMEK

Perşembe, Ekim 04, 2018 / / , , , , , , , ,

C# İLE YANDEX KURUMSAL EPOSTA ÜZERİNDEN MAIL GÖNDERMEK    


public static string YandexUzerinden(string mailBaslik, string mailIcerik, string aliciPosta, object ekDosya = null)
    {
        string gonderimSonucu = "";
        int mailAdresiSayisi = Regex.Matches(aliciPosta, ";").Count + 1;
        SmtpClient client = new SmtpClient("smtp.yandex.com.tr", 587);
        MailMessage mail = new MailMessage();
        mail.From = new MailAddress("Eposta adresiniz", "Yandex Test"); //gönderici olarak görünen mail bilgileri
        mail.Priority = MailPriority.High;
        mail.Subject = mailBaslik;
        if (mailAdresiSayisi > 1)
        {
            string[] aliciPostaAdresleri = aliciPosta.Split(';');
            for (int i = 0; i < mailAdresiSayisi; i++)
            {
                string aliciPostaAdresi = aliciPostaAdresleri[i];
                mail.To.Add(new MailAddress(aliciPostaAdresi, ""));
            }
        }
        else
        {
            mail.To.Add(new MailAddress(aliciPosta, ""));
        }
        mail.Body = mailIcerik;
        mail.IsBodyHtml = true;
        if (ekDosya != null)
        {
            mail.Attachments.Add(new Attachment(ekDosya.ToString()));
        }
        NetworkCredential girisIzni = new NetworkCredential("Eposta adresiniz", "Şifreniz");
        client.UseDefaultCredentials = false;
        client.EnableSsl = true;
        client.Credentials = girisIzni;
        try
        {
            client.Send(mail);
            gonderimSonucu = "OK";
            return gonderimSonucu;
        }
        catch (Exception ex)
        {
            gonderimSonucu = ex.Message;
            return gonderimSonucu;
        }
    }

Yukarıdaki kodu 2020 yılında test ettiğimde aşağıdaki hata kodunu vermeye başladığını farkettim.

"Yanlış komut sırası. Sunucu yanıtı şöyleydi: 5.5.4 Error: send AUTH command first."

https://passport.yandex.com.tr/ adresinden Yandex mail hesabına giriş yaparak bir uygulama şifresi üretmek gerekiyor. İlgili ekranda oluşturduğunuz şifreyi kodun içinde şifre alanına yazdığınızda sorun çözülüyor.

0

ASP.NET MVC VIEWDATA VEYA VIEWBAG İLE TAŞINAN VERİLERİN HTML VE JAVASCRIPT İÇİNDE TÜRKÇE KARAKTER SORUNU

Perşembe, Ağustos 23, 2018 / / , , , , ,

Asp.net Mvc ile View tarafına ViewData veya ViewBag ile veri taşırken Türkçe karakterler doğru görüntülenmiyor. Bu sorunu gidermek için veriyi Html.Raw ile kullanmak gerekiyor.

Aşağıda ViewData ile gelen veriyi Javascript içinde kullandık.


var varsayilanSemtMahSecenekAd = "@Html.Raw(@ViewData["KayitliOrtakSemtMahAd"])";

0

TCMB DÖVİZ KURLARI ÇEKME C# XML OKUMA

Cuma, Temmuz 13, 2018 / / , , ,

T.C. Merkez Bankası Döviz Kurlarını Çekme XML Okuma

        /// <summary>
        /// Merkez Bankası İstenen Tarih Döviz Kurları
        /// </summary>
        public static void DovizKurBilgi(DateTime tarih)
        {
            for (int i = 0; i < 15; i++)
            {
                string gun = tarih.Day.ToString();
                string ay = tarih.Month.ToString();
                string yil = tarih.Year.ToString();
                if (gun.Length < 2)
                {
                    gun = "0" + gun;
                }
                if (ay.Length < 2)
                {
                    ay = "0" + ay;
                }
                try
                {
                    string kurUrl = "http://www.tcmb.gov.tr/kurlar/" + yil + ay + "/" + gun + ay + yil + ".xml";
                    XmlDocument xmlVerisi = new XmlDocument();
                    xmlVerisi.Load(kurUrl);
                    //xmlVerisi.Load("http://www.tcmb.gov.tr/kurlar/201807/13072018.xml");
                    decimal dolar = Convert.ToDecimal(xmlVerisi.SelectSingleNode(string.Format("Tarih_Date/Currency[@Kod='{0}']/ForexBuying", "USD")).InnerText.Replace('.', ','));
                    decimal euro = Convert.ToDecimal(xmlVerisi.SelectSingleNode(string.Format("Tarih_Date/Currency[@Kod='{0}']/ForexBuying", "EUR")).InnerText.Replace('.', ','));
                    System.Web.HttpContext.Current.Session["KUR_DOLAR"] = dolar.ToString();
                    System.Web.HttpContext.Current.Session["KUR_EURO"] = euro.ToString();
                    break;
                }
                catch (Exception ex)
                {
                    //ilgili güne ait xml verisi bulunamazsa 1 gün geri git ve tekrar dene
                    tarih = tarih.AddDays(-1);
                }
            }
        }

0

ASP.NET MVC ITEXTSHARP KULLANARAK PDF SAYFALARI DİNAMİK OLARAK DÜZENLEME

Pazar, Haziran 17, 2018 / / , , ,

Pdf dosyasına yazılacak verilerin koordinatlarını bir tabloda tutarak aşağıdaki şekilde ItextSharp kullanarak gerçekleştirdik.

  public string PdfFormIslem(int id, int formId)
        {
            //form bilgilerini getir         
            //formda kullanılacak alan bilgilerini getir
            //personel bilgilerini getir
            string olusanDosyaYolVeAd = String.Empty;
            //form bilgilerini getir
            var veriForm = Islem.Form.Bilgi(formId);
            //form bilgisi varsa
            if (veriForm != null)
            {
                try
                {
                    string kullanilacakFormAd = veriForm.FormAd;
                    string kullanilacakDosyaAd = veriForm.DosyaAd;
                    string kullanilacakYol = Server.MapPath("/Upload/Form/");
                    string[] diziDosyaAd = veriForm.DosyaAd.Split('.');
                    string kullanilacakYeniKayitAd = diziDosyaAd[0];
                    //personel bilgilerini getir
                    var veriPersonel = Islem.Personel.Bilgi(id);
                    string personelAdSoyad = veriPersonel.Ad + " " + veriPersonel.Soyad; // "TAMER YİĞİT";
                    string personelAdSoyadKadin = veriPersonel.Ad + " " + veriPersonel.Soyad + " " + veriPersonel.IlkSoyad; // "TAMER YİĞİT";
                    string duzenlemisPersonelAdSoyad = Helpers.Araclar.TurkceKarakterDuzenle(personelAdSoyad);
                    kullanilacakYeniKayitAd += "_" + duzenlemisPersonelAdSoyad + ".pdf";
                    olusanDosyaYolVeAd = kullanilacakYol + kullanilacakYeniKayitAd;
                    // oku
                    PdfReader reader = new PdfReader(kullanilacakYol + kullanilacakDosyaAd);
                    int pdfSayfaSayisi = reader.NumberOfPages; //pdf toplam kaç sayfadan oluşuyor
                    Document document = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
                    // yaz
                    FileStream fs = new FileStream(kullanilacakYol + kullanilacakYeniKayitAd, FileMode.Create, FileAccess.Write);
                    PdfWriter writer = PdfWriter.GetInstance(document, fs);
                    document.Open();
                    //sayfa sayısı kadar dön
                    for (int s = 1; s <= pdfSayfaSayisi; s++)
                    {
                        document.NewPage(); //yeni sayfa oluşmasını sağladık
                        Rectangle size = reader.GetPageSizeWithRotation(s);
                        // pdf content
                        PdfContentByte cb = writer.DirectContent;
                        // font ayarları
                        string ARIALUNI_TFF = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "Arial.ttf");
                        BaseFont bf = BaseFont.CreateFont(ARIALUNI_TFF, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
                        cb.SetColorFill(BaseColor.BLACK);
                        cb.SetFontAndSize(bf, 9);
                        // verileri yaz
                        int baslangicKoordinatX = 0;
                        int baslangicKoordinatY = 792;
                        var veriFormData = Islem.FormData.Listele(formId, s);
                        //form dataları varsa
                        if (veriFormData != null)
                        {
                            //formda kullanılacak data sayısı kadar dön
                            for (int i = 0; i < veriFormData.Count; i++)
                            {
                                var formDataAd = veriFormData[i].DataAd;
                                float formDataKoordinatX = Convert.ToUInt32(veriFormData[i].KoordinatX);
                                float formDataKoordinatY = Convert.ToInt32(veriFormData[i].KoordinatY);
                                var cekilecekData = veriPersonel.GetType().GetProperties().Single(p => p.Name == formDataAd);
                                var yazilacakData = cekilecekData.GetValue(veriPersonel);
                                if (yazilacakData != null)
                                {
                                    cb.BeginText();
                                    cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, yazilacakData.ToString(), baslangicKoordinatX + formDataKoordinatX, baslangicKoordinatY - formDataKoordinatY, 0);
                                    cb.EndText();
                                }
                            }
                        }
                        // pdf oluştur
                        PdfImportedPage page = writer.GetImportedPage(reader, s);
                        cb.AddTemplate(page, 0, 0);
                    }
                    // kapat
                    document.Close();
                    //fs.Flush();
                    fs.Close();
                    writer.Close();
                    reader.Close();
                    return olusanDosyaYolVeAd;
                }
                catch (Exception ex)
                {
                    return ex.Message;
                }
            }
            return olusanDosyaYolVeAd;
        }

0

ASP.NET MVC AJAX İLE VERGİ NO DOĞRULAMA

Cumartesi, Mayıs 05, 2018 / / , , , ,

Girilen vergi numarasının doğru olup olmadığı aşağıdaki şekilde kullanılabilir.

Contoller tarafı

        [HttpPost]
        public JsonResult VergiNoKontrol(string no)
        {
            if (ModelState.IsValid)
            {
                if (no.Length == 10)
                {
                    var x = new int[9];
                    var y = new int[9];
                    for (int i = 0; i < 9; i++)
                    {
                        x[i] = (int.Parse(no[i].ToString()) + 9 - i) % 10;
                        y[i] = (x[i] * (int)Math.Pow(2, 9 - i)) % 9;
                        if (x[i] != 0 && y[i] == 0)
                        {
                            y[i] = 9;
                        }
                    }
                    int hesap = ((10 - (y.Sum() % 10)) % 10);
                    string sonKarakter = no.Substring(9, 1);
                    if (hesap == Convert.ToInt32(sonKarakter))
                    {
                        return Json(new { Durum = true }, JsonRequestBehavior.AllowGet);
                    }
                    //return ((10 - (y.Sum() % 10)) % 10) == int.Parse(vkn[9].ToString());
                }
                else
                {
                    return Json(new { Durum = false }, JsonRequestBehavior.AllowGet);
                }
            }
            return Json(new { Durum = false });
        }



View tarafı

<script type="text/javascript">
    $(function () {
        var isSuccess = false;
        $("#txtVergiNo").focusout(function () {
            //alert("kontrol et");
            var kontrolEdilecekBilgi = $("#txtVergiNo").val();
            if (kontrolEdilecekBilgi == "") {
                //$("#mesajMetin").text("Lütfen tüm alanları doldurunuz!");
                //$("#mesaj").show();
                return;
            }
            var data = { no: kontrolEdilecekBilgi };
            $.ajax({
                type: 'POST',
                url: "/Cari/VergiNoKontrol",
                data: JSON.stringify(data),
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                success: function (sonuc) {
                    //alert(sonuc.Durum);
                    if (sonuc.Durum == true) {
                        isSuccess = true;
                    }
                },
                complete: function () {
                    if (isSuccess == true) {
                        //alert("true")                     
                    } else {
                        //alert("Vergi No Hatalı! Lütfen kontrol ediniz.");
                        swal("Vergi No Hatalı!", "Lütfen kontrol ediniz..", "error")
                    }
                    isSuccess = false;
                }
            });
            })
    });
</script>

0

ASP.NET MVC RAZOR @ KAÇIŞ YÖNTEMLERİ

Çarşamba, Mart 07, 2018 / / , , , ,

Örneğin eposta adresinin girileceği bir textbox kontrolünün placeholder özelliğine @ işareti yazdığınızda bunu Razor kodu gibi algılayıp hata verecektir. Bu ve benzeri durumlarda aşağıdaki yöntem kullanılabilir. 


@Html.Raw("@")

0

ENTITY İLE LIST TİPİNDE GELEN VERİLERİ DATATABLE'A AKTARMA

Cumartesi, Şubat 10, 2018 / / , , ,

Entity ile List<> türünde gelen kayıtları DataTable içine aktaran fonksiyon..



        public static DataTable DataTableYap<T>(List<T> items)
        {
            DataTable dataTable = new DataTable(typeof(T).Name);
            PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
            foreach (PropertyInfo prop in Props)
            {
                var type = (prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>) ? Nullable.GetUnderlyingType(prop.PropertyType) : prop.PropertyType);
                dataTable.Columns.Add(prop.Name, type);
            }
            foreach (T item in items)
            {
                var values = new object[Props.Length];
                for (int i = 0; i < Props.Length; i++)
                {
                    values[i] = Props[i].GetValue(item, null);
                }
                dataTable.Rows.Add(values);
            }
            return dataTable;
        }


Çağır..

            var tekrarsizKayitlar = Islem.Finans.ListeleRapor(cariTip:0, sehirId: secilenSehirId, ilceId: secilenIlceId, durum: 1);
            //gelen kayıtları datatable içine at
            DataTable dtRapor = new DataTable();
            dtRapor = DataTableYap(tekrarsizKayitlar);

0

ASP.NET MVC DATATABLE KULLANARAK VIEW TARAFINDA LİSTELEME

Cumartesi, Aralık 23, 2017 / / , , , ,

Controller tarafında üzerinde çeşitli işlemler yaptığımız DataTable tablomuzu View tarafına gönderdik ve listeleme yaptık.

Controller tarafı

public ActionResult Rapor()
        {
            DataTable dtRapor = RaporTablo(Convert.ToDateTime(Session["ILKTARIH"]), Convert.ToDateTime(Session["SONTARIH"]));
            return View(dtRapor);
        }


View tarafı

@model System.Data.DataTable
<table class="table">
                                <thead>
                                    <tr>
                                        <th>ŞEHİR</th>
                                        <th>İLÇE</th>
                                        <th>CARİ</th>
                                        <th>AÇIKLAMA</th>
                                        <th>TARİH</th>
                                        <th>TUTAR</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    @for (int i = 0; i < Model.Rows.Count; i++)
                                        {
                                            <tr>
                                                <td>@Model.Rows[i]["SehirAdi"]</td>
                                                <td>@Model.Rows[i]["IlceAdi"]</td>
                                                <td>@Model.Rows[i]["CariUnvan"]</td>
                                                <td>@Model.Rows[i]["Ad"]</td>
                                                <td>@Convert.ToDateTime(Model.Rows[i]["HareketTarih"]).ToString("dd.MM.yyyy")</td>
                                                <td>@Convert.ToDouble(Model.Rows[i]["Miktar"]).ToString("N2") @if(@Model.Rows[i]["ParaTip"].ToString()=="1") { @Html.Raw("TRY") } @if(@Model.Rows[i]["ParaTip"].ToString()=="2") { @Html.Raw("USD") } @if(@Model.Rows[i]["ParaTip"].ToString()=="3") { @Html.Raw("EURO") } </td>
                                            </tr>
                                        }
                                </tbody>
                            </table>

1

ASP.NET MVC İLE SUMMERNOTE BENZERİ WYSIWYG EDİTÖRLERİN KULLANIMI

Pazar, Ekim 22, 2017 / / , , ,

Asp.Net Mvc'de Summernote aşağıdaki şekilde kullanılabilir.


Yerleşim şekli;

<textarea id="m_summernote_1" name="m_summernote_1" class="summernote"></textarea>


Controller tarafında verinin alınma şekli; [ValidateInput(false)] kullanımına dikkat.

 [HttpPost]
        [ValidateInput(false)]
        public ActionResult Ekle(FormCollection form)
        {           
                string sablon = form["m_summernote_1"];
}

0

AJAX İLE DOLDURULAN BOOTSTRAP DROPDOWN (SELECT) KONTROLÜNÜN GÖRÜNMEMESİ

Salı, Eylül 19, 2017 / / , , , ,

Bootstrap select stili kullanan ve Ajax ile doldurulan  <Select> etiketinin elemanlarının görüntülenmeme sorunu.

Aşağıdaki şekilde doldurulan <Select> etiketinin elemanları kaynaktan kontrol edildiğinde dolmuş olmasına rağmen görüntülenmiyordu. Javascript içinde elemanlar doldurulduktan sonra ilgili <Select> etiketini refresh etmek gerekiyor.

     $("#dropSehir").change(function () {
        var dropSecim = $(this);
        var secilenId = dropSecim.val();
        var dropDolacak = $('#dropIlce');
        dropDolacak.empty();
        if (secilenId != "" || secilenId != "-1") {
            $.ajax({
                type: "POST",
                url: "/Ortak/IlceDoldur",
                datatype: "Json",
                data: { id: secilenId }
            }).done(function (sonuc) {               
                for (var i = 0; i < sonuc.length; i++) {
                    var elemanId = sonuc[i].ilceId;
                    var elemanAd = sonuc[i].IlceAdi;
                    var option = $("<option></option>")
                    option.text(elemanAd);
                    option.val(elemanId);
                    dropDolacak.append(option);
                }
                dropDolacak.selectpicker('refresh');
            });
        }
        else {
            dropDolacak.empty();
        }
    });

0

ASP.NET MVC AJAX PARTIAL VIEW YENİLEME REFRESH

Pazar, Ağustos 27, 2017 / / , , , , , ,

Asp.net Mvc'de bir PartialView sayfasını Jquery Ajax kullanarak yenileme. Partial View sayfamızda yenilenmesini istediğimiz bir tablomuz olsun. Bu tablo Jquery Datatable eklentisini kullansın. Gönderdiğimiz filtreye göre tablomuz yenilensin.

Jquery DataTable eklentisi listelenmiş veriler arasında kendisi filtreleme yapabiliyor fakat bu filrelemeyi yüklenmiş veriler üzerinde gerçekleştiriyor. Yani Pasif olanları göster dediğimde kendisine doldurulmuş olan tüm veriler arasından pasif kriterine uyanları listeliyor. Bu durum performans kaybına sebep olduğundan Ajax yenileme tekniğini kullanarak yapılan seçime göre tablonun yeni verilerle dolmasını sağlayacağız.



Partial View'ın çağrılacağı asıl sayfamız..

....
<div id="tabloBolum">
                @Html.Partial("_PartialDataTable")
            </div>
....


_PartialDataTable isimli Partial View saymaızdaki tablo yerleşimi ve ViewBag.TabloVeri ile verilerin gösterimi

....
<table class="m-datatable" id="dataTablo" width="100%">
    <thead>
        <tr>
            <th title="#" data-field="RecordID">
                <label class="m-checkbox m-checkbox--solid m-checkbox--brand cbSecim" style="margin-left:2px;">
                    <input type="checkbox" name="cbSecTumu" id="cbSecTumu">
                    <span></span>
                </label>
            </th>
            <th title="Field #1" data-field="Islem">İşlem</th>
            <th title="Field #2" data-field="Sayfa">Sayfa</th>
            <th title="Field #3" data-field="NodId">NodId</th>
            <th title="Field #4" data-field="SayfaTip">SayfaTip</th>
            <th title="Field #5" data-field="Durum">Durum</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in ViewBag.TabloVeri)
        {
            <tr>
                <td>
                    <label class="m-checkbox m-checkbox--solid m-checkbox--brand">
                        <input type="checkbox" name="cbSecim[]" id="cbSecim[]" value="@item.SayfaId" class="cbSecim @item.SayfaId">
                        <span></span>
                    </label>
                </td>
                <td ..........


_PartialDataTable isimli Partial View sayfamızdaki Ajax işlemini yapacak script bloğu..


<script type="text/javascript">
//seçim yapıldıkça çağrılacak fonksiyonumuz
    function TabloListele() {
        var secilenDurum = $("#m_form_status").val();
        var data = { seciliDurum: secilenDurum };
     
        $.ajax({
            url: '@Url.Action("TabloListe", "Sayfa")',
            type: "POST",
            data: JSON.stringify(data),
            contentType: 'application/json',
            success: function (result) {
                $("#tabloBolum").html(result);
                $("#m_form_status").val(secilenDurum);
            }
        });
    }
</script>



Sayfa Controller içindeki TabloListe isimli Action..

        [HttpPost]
        public PartialViewResult TabloListe(string seciliDurum)
        {
            object durum = 1;
            if (seciliDurum == "Pasif")
            {
                durum = 0;
            }
            else if (seciliDurum=="Tumu")
            {
                durum = null;
            }
            else
            {
                durum = 1;
            }
            var model = Islem.Sayfa.Listele(durum: durum);
            ViewBag.TabloVeri = model;
            return PartialView("_PartialDataTable", ViewBag.TabloVeri);
        }



Gerekli Jquery ve Datatable eklentisi scriptlerinizi ilave etmelisiniz..

0

ASP.NET MVC AJAX LOGIN ÜYE GİRİŞİ

Cumartesi, Ağustos 26, 2017 / / , , , ,

Login işlemini gerçekleştireceğimiz View'ın form bölümü

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "__AjaxAntiForgeryForm" }))
                {
                    @Html.AntiForgeryToken()

                    <!--begin::Body-->
                    <div class="m-login__body">

                        <!--begin::Signin-->
                        <div class="m-login__signin">
                            <div class="m-login__title">
                                <h3>Giriş Yap</h3>
                            </div>

                            <div id="mesaj" class="alert alert-danger alert-dismissible fade show" role="alert" style="display:none;">
                                <button type="button" class="close" data-dismiss="alert" aria-label="Close"></button>
                                <span id="mesajMetin"></span>
                            </div>

                            <div class="form-group m-form__group">
                                <input class="form-control m-input" type="text" placeholder="E-posta" id="kullaniciAd" name="kullaniciAd" autocomplete="off" required>
                            </div>
                            <div class="form-group m-form__group">
                                <input class="form-control m-input m-login__form-input--last" type="password" placeholder="Şifre" id="sifre" name="sifre" required>
                            </div>

                            <!--end::Form-->
                            <!--begin::Action-->
                            <div class="m-login__action">
                                <a href="#" class="m-link">
                                    <span>Şifremi Unuttum</span>
                                </a>
                                <button id="btnGiris" class="btn btn-primary" onclick="return false;">Giriş</button>
                            </div>

                        </div>

                        <!--end::Signin-->
                    </div>
                    <!--end::Body-->

                }



AJAX Bölümü

<script type="text/javascript">

        $("#btnGiris").click(function () {

            var girisDurum = false;
            var girisHata = "";

            var form = $('#__AjaxAntiForgeryForm');
            var token = $('input[name="__RequestVerificationToken"]', form).val();
            var kullaniciAd = $("#kullaniciAd").val();
            var sifre = $("#sifre").val();

            if (kullaniciAd == "" || sifre == "") {

                $("#mesajMetin").text("Lütfen tüm alanları doldurunuz!");
                $("#mesaj").show();
                return;
            }

            $("#mesaj").hide();
            $("#btnGiris").addClass("m-loader m-loader--right m-loader--light");
            $("#btnGiris").attr("disabled", true);

            $.ajax({
                url: "/Login/GirisKontrol",
                type: 'POST',
                data: {
                    __RequestVerificationToken: token,
                    username: kullaniciAd,
                    password: sifre
                },
                success: function (sonuc) {
                    //alert(sonuc.Durum);

                    if (sonuc.Durum == "OK") {

                        girisDurum = true;

                    }
                    else {

                        girisHata = sonuc.Durum;

                    }
                },
                complete: function () {

                    if (girisDurum == true) {

                        //alert("başarılı")
                        window.location.href = "/Profil";

                    } else {

                        //alert(girisHata);

                        if (girisHata == "BULUNAMADI") {

                            $("#mesajMetin").text("Kullanıcı bulunamadı. Bilgilerinizi kontrol ediniz.");
                            $("#mesaj").show();
                            $("#btnGiris").removeClass("m-loader m-loader--right m-loader--light");
                            $("#btnGiris").attr("disabled", false);

                        }
                        else {

                            $("#mesajMetin").text(girisHata);
                            $("#mesaj").show();
                            $("#btnGiris").removeClass("m-loader m-loader--right m-loader--light");
                            $("#btnGiris").attr("disabled", false);

                        }

                    }

                    girisDurum = false;

                }
            });

            return false;

        });
    </script>

Controller Bölümü

[HttpPost]
        [ValidateAntiForgeryToken]
        public JsonResult GirisKontrol(string username, string password)
        {
            try
            {
                System.Threading.Thread.Sleep(100);

                if (ModelState.IsValid)
                {
                    var md5Sifre = MD5Sifrele(password);

                    var veri = Login.GirisYap(username, md5Sifre);

                    if (veri != null)
                    {

                        Session["KULLANICIID"] = veri.KullaniciId.ToString();
                        Session["KULLANICIAD"] = veri.KullaniciAd.ToString();
                        Session["KULLANICIEPOSTA"] = veri.Eposta.ToString();
                        Session["PROFILAD"] = veri.Ad.ToString();
                        Session["PROFILSOYAD"] = veri.Soyad.ToString();
                        Session["PROFIL_AD_SOYAD"] = Session["PROFILAD"] + " " + Session["PROFILSOYAD"];
                        Session["YONETIM_YETKI"] = "1";

                        string ilkHarfAd = ".";
                        string ilkHarfSoyad = ".";

                        if (Session["PROFILAD"].ToString() != String.Empty)
                        {
                            ilkHarfAd = Session["PROFILAD"].ToString().Substring(0, 1);
                        }
                        if (Session["PROFILSOYAD"].ToString() != String.Empty)
                        {
                            ilkHarfSoyad = Session["PROFILSOYAD"].ToString().Substring(0, 1);
                        }

                        string adSoyadIlkHarfler = ilkHarfAd.ToUpper() + ilkHarfSoyad.ToUpper();
                        Session["ADSOYAD_ILK_HARFLER"] = adSoyadIlkHarfler;

                        //ViewBag.Sonuc = "Giriş başarılı!";
                        return Json(new { Durum = "OK" }, JsonRequestBehavior.AllowGet);
                    }
                    else
                    {
                        return Json(new { Durum = "BULUNAMADI" }, JsonRequestBehavior.AllowGet);
                    }
                }

                return Json(new { Durum = "HATA" });
            }
            catch (Exception ex)
            {
                return Json(new { Durum = "HATA ~ " + ex.Message }, JsonRequestBehavior.AllowGet);
            }
        }

0

ASP.NET MVC FILTER KULLANIMI

Çarşamba, Ağustos 16, 2017 / / , , , ,

Filter kullanarak Mvc projelerinde kullanıcı ve session kontrolü yapmak

Projeye Filters adında bir klasör ekleyip, Auth.cs isimli bir class oluşturuyoruz.

Classımızı aşağıdaki şekilde değiştiriyoruz.

public class Auth : FilterAttribute, IAuthorizationFilter
    {
        public void OnAuthorization(AuthorizationContext filterContext)
        {
            if (System.Web.HttpContext.Current.Session["KULLANICIID"] == null)
            {
                filterContext.Result = new RedirectResult("/Login");
            }
        }
    }


Controller içinde kullanıcı kontrolü yapmak istediğimiz Action'ın üzerine [Auth] şeklinde kontrolümüzü gerçekleştiriyoruz. İlgili Controller'ın tamamında bu kontrolü gerçekleştirmek için [Auth], classın üzerine taşınabilir.

Örneğin:

namespace TamerYigitMvc.Controllers
{
    [Auth]
    public class TestController : Controller
    {

Veya aşağıdaki şekilde her Action için ayrı ayrı kullanılabilir.

[Auth]
        public ActionResult Index()
        {
            ......
            return View();
        }

[Auth]
        public ActionResult Ekle()
        {
           ....
            return View();
        } 

0

C# İLE OFFICE365 ÜZERİNDEN MAIL GÖNDERMEK

Cumartesi, Temmuz 29, 2017 / / , ,


C# ile Office365 üzerinden mail gönderebilmek için öncelikle aşağıdaki bağlantıdan Microsoft Exchange Web Services Managed API'ı indirdik. Kurulumu yaptıktan sonra Visual Studio'dan projemizin Reference bölümünden gerekli .dll dosyalarını ekledik. Bulunduğu yol C:\Program Files\Microsoft\Exchange\Web Services\2.2\

İndirme bağlantısı : https://www.microsoft.com/en-us/download/details.aspx?id=42951


Aşağıdaki namespace gerekiyor.

using Microsoft.Exchange.WebServices.Data;


Mail gönderimini yapacak Exchange kodlarımız

    public static void ExchangeUzerinden(string mailBaslik, string mailIcerik, string aliciPosta)
    {
        EmailAddress alacakAdres = new EmailAddress(aliciPosta);
        string strsubject = mailBaslik;
        string strbody = mailIcerik;
        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
        service.Credentials = new WebCredentials("test@bosforbilisim.com.tr", "123abcd");
        //bunu kullanmaktaki amaç service.URL bilgisini otomatik almak fakat beklettiği için aşağıdaki şekilde manuel olarak tanımladık.
        //service.AutodiscoverUrl("tamer@bosforbilisim.com.tr", RedirectionUrlValidationCallback);
        service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
        EmailMessage message = new EmailMessage(service);
        message.Subject = strsubject;
        message.Body = strbody;
        message.ToRecipients.Add(alacakAdres);
        message.Save();
        message.SendAndSaveCopy();
    }


    private static bool RedirectionUrlValidationCallback(string redirectionUrl)
    {
        bool result = false;
        Uri redirectionUri = new Uri(redirectionUrl);
        if (redirectionUri.Scheme == "https")
        {
            result = true;
        }
        return result;
    }


Gönder :

        protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                MailGonder.ExchangeUzerinden("Başlık", "Mesaj içeriği", "tmryigit@gmail.com");
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

0

ASP.NET MVC BİR CONTROLLER'DAN BAŞKA BİR CONTROLLER'A PARAMETRE GÖNDERME

Pazar, Temmuz 16, 2017 / / , , ,

Controller arasında parametre taşıma aşağıdaki şekillerde yapılabiliyor.

QueryString ile Adres Çubuğundan

Customer class kodları

public class Customer
{
    public int CustomerID { get; set; }
    public string CustomerName { get; set; }
    public string Country { get; set; }
}

Aşağıdaki kod, Home1 isimli Controller'a ait Index Methodu.

public ActionResult Index()
{
    Customer data = new Customer()
    {
        CustomerID = 1,
        CustomerName = "Abcd",
        Country = "USA"
    };
    string url=string.Format("/home2/index?customerid={0}
               &customername={1}&country={2}",
               data.CustomerID,data.CustomerName,data.Country);
    return Redirect(url);
}


Aşağıdkai kod ise Home2 isimli Controller'ın Index methodunda gelen parametleri nasıl alacağınız gösteriliyor.

public ActionResult Index()
{
    Customer data = new Customer();
    data.CustomerID = int.Parse(Request.QueryString["CustomerID"]);
    data.CustomerName = Request.QueryString["CustomerName"];
    data.Country = Request.QueryString["Country"];
    return View(data);
}



TempData yöntemini kullanarak parametre gönderme

Home1 içinde TempData["mydata"] 'nın dolduruluşu..

public ActionResult Index()
{
    Customer data = new Customer()
    {
        CustomerID = 1,
        CustomerName = "Abcd",
        Country = "USA"
    };
    TempData["mydata"] = data;
    return RedirectToAction("Index", "Home2");
}

Home2 içinde TempData["mydata"] 'nın okunuşu..

public ActionResult Index()
{
    Customer data = TempData["mydata"] as Customer;
    return View(data);
}


Diğer yöntemler ve kullanım şekilleri için http://www.binaryintellect.net/articles/8e64d05b-ab2e-45f6-b7f5-b8a90168915e.aspx

SON YORUMLAR