BAĞLANTILARIM

Takip Edin:

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

SHAREPOINT 2013 FLOW (AKIŞ) HTTP POST İLE DIŞARIDAN TETİKLEME

Perşembe, Ocak 17, 2019 / /

Bu işlem için öncelikle HttpRequest ile başlatılan ve methodu POST olan bir flow oluşturmak gerekmekte.

Flow'u oluşturduktan sonra Flow'un adresi yani url bilgisi alınır. Kodlarımızdan istekte bulunurken isteği bu Flow'a yapacağımızdan flow url adresi önemli.

Testler için Postman programı kullanılabilir.

Genel mantığı Flow'a url nin devamında Flow'da kullanılacak parametreler eklenerek kullanılabileceği gibi, Sharepoint'te yer alan bir listenin sadece satır ID bilgisi gönderilerek Flow'un devamında yani koşullarında o listenin tüm bilgileri kullanılabilir. Burada önemli olan Flow koşullarını oluştururken ihtiyaç olan bilgilerin tamamının Url'deki parametlerden mi yoksa tıklanmış listenin satırının ID si başlangıç olarak alınıp tüm bilgileri listelerden çekmek mi olduğudur.

Detaylı anlatım için :

https://www.about365.nl/2018/11/13/securing-your-http-request-trigger-in-flow/
https://blog.portiva.nl/2018/10/22/custom-actionable-messages-with-microsoft-flow-part-2-getting-the-response/
http://www.techwithnakkeeran.com/2018/05/creating-office-365-sharepoint-custom.html
https://sergeluca.wordpress.com/2017/03/16/invoke-a-flow-from-another-sharepoint-flow-step-12-tutorial/
https://elbruno.com/2017/02/01/flow-how-to-invoke-a-flow-from-an-external-app-using-http-request/
https://flow.microsoft.com/en-us/blog/call-flow-restapi/

0

SHAREPOINT 2013 LİSTEYE (TABLOYA) JSON BUTON EKLEME

Perşembe, Ocak 17, 2019 / /

Sharepoint 2013'te listeye Add Column seçeneği ile yeni bir sütun eklenerek aşağıdaki kod ile özel bir buton oluşturulabilir.

Aşağıdaki örnek tıklandığında bir flow tetiklemektedir. ID bölümüne tetiklenecek flowun ID bilgisi yazılmalıdır.

{
    "$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
    "elmType": "span",
    "style": {
        "color": "#0078d7"
    },
    "children": [
    {
        "elmType": "span",
        "attributes": {
            "iconName": "Flow"
        }
    },
    {
        "elmType": "button",
        "style": {
            "border": "none",
            "background-color": "transparent",       
            "color": "#0078d7",   
            "cursor": "pointer"
        },
        "txtContent": "Send to Manager",
        "customRowAction": {
            "action": "executeFlow",
            "actionParams": "{\"id\": \"183bedd4-6f2b-4264-855c-9dc7617b4dbe\"}"
        }         
    }       
  ]
}


Detaylı bilgi için : https://docs.microsoft.com/en-us/sharepoint/dev/declarative-customization/column-formatting

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();
        }

SON YORUMLAR