Resimleri Farklı Kaydet’i Engelleme

Yazdığınız uygulamadaki resimlerin indirilmesini istemiyorsanız browser default özelliği olan sağ tıklamayla resmi kaydet, resmi farklı kaydet gibi seçenekleri engellemeniz gerekir. Bunu jquery sorgusuyla basit bir şekilde yapabilirsiniz.

Buradaki slideImage resmin olduğu divin Id’sidir.

$(document).ready(function () {
$(‘#slideImage’).bind(‘contextmenu’, function () { return false; });
});

Advertisements

Visual Studio 2015 değişken değerlerini debug’ta görememe

Visual Studio 2015 fails to evaluate variables when two versions of assembly are loaded.  Debug yaparken AddWatch , QuickWatch ile değişken değerlerini kontrol ettiğimizde referanslardan birinin iki defa yüklenmiş olmasından dolayı null exception gibi bir uyarı çıkmaktadır. Bunu aşmak için Debug – > Options ->Debugging -> General ‘ın altında Use the legacy C# and VB expression evaluations seçeneği işaretlenmelidir. Bu şekilde değerleri görebilirsiniz.

 

enter image description here

 

Resim boyutlama

if (Request.Files.Count > 0)
{
var file = Request.Files[0];
WebImage file1 = new WebImage(file.InputStream);
file1.Resize(220, 220);
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath(“~/Images/Foods/”), fileName);
// Apply the Scaled Resize Constraint
//new ScaledResizeConstraint(220, 220).SaveProcessedImageToFileSystem(“src.jpg”, “out.jpg”);
file1.Save(path);
// resize to 400 px, height 200, ScaleToFit, gif
//var byteArray3 = resizer.Resize(400, 200, false, ImageEncoding.Gif);
file.SaveAs(path);
ImageResizer resizer = new ImageResizer(path);

// resize to 400 px, jpg quality 90
var byteArray1 = resizer.Resize(220, 220, false, ImageEncoding.Png);

// resize to 400 px, height 200, ScaleToFill, png
var byteArray2 = resizer.Resize(220, 220, false, ImageEncoding.Png);
var byteArray3 = resizer.Resize(220, 220, false, ImageEncoding.Png);
resizer.SaveToFile(path);
food.Image = “Images/Foods/” + fileName;
}
}

http://imageresizer.apphb.com/?filename=krep.png

http://stackoverflow.com/questions/17079090/how-to-resize-and-save-an-image-which-uploaded-using-file-upload-control-in-c-sh

 

 

 

Hatalar ve Çözümleri

MVC : Entity ‘de bir değişiklik yapıp kaydetmeye çalıştığımızda ” Validation failed for one or more entities. See ‘EntityValidationErrors’ property for more details ” şeklinde bir hata alıyorsak  en olası sebebi şunlar olabilir  :

  1. Veritabanında (database) NULL olamaz olarak yapılandırılmış (Allow Nulls işareti kaldırılmış) bir alana NULL değer girmeye çalışmak
  2. Belirtilen üst sınır dışında veri giriyi yapmaya çalışmak, örneğin, nvarchar(5) olan bir alana 5 karakterden uzun veri girişi yapmaya çalışmak.

Çözüm olarak try catch bloğunda

catch (DbEntityValidationException e)
{
     foreach (var eve in e.EntityValidationErrors)
     {
           Response.Write(string.Format("Entity türü \"{0}\" şu hatalara sahip \"{1}\" Geçerlilik hataları:", eve.Entry.Entity.GetType().Name, eve.Entry.State));
       foreach (var ve in eve.ValidationErrors)
       {
         Response.Write(string.Format("- Özellik: \"{0}\", Hata: \"{1}\"", ve.PropertyName, ve.ErrorMessage));
        }
         Response.End();
         }



şeklinde bir kod parçasıyla hangi property’den dolayı hata alındığını görebiliriz.

C#  :  System.InvalidCastException: Specific cast is not valid (Belirtilen atama geçerli değil ) hatası : Bu hata iletilecek datanın beklenen şekilde alınmadığı ya da atandığı datatable, list vs. ile uyumlu olmadığından dolayı verilebiliyor. Bu hatayla entity’de sp’den aldığım datayı datatable atarken aldım. Sp’nin döndüğü cursor’u kontrol ettiğimde bir kolonun , den sonraki ondalık kısım da uzun bir rakamlar dizisi geldiğini gördüm. Round ile kolonun 3 haneli gelmesini sağlayınca hata düzeldi.

SQL :String or binary data would be truncated : Bu hata tabloya insert etmek ettiğiniz kayıttan dolayı alınabilir. Insert edilen kolonun length’i ile gelen data genişliği uyuşmamaktadır. Kolon length’i arttırılabilir.

MVC : Httpcontext current does not contain a definition hatası : Sebebi Controlller class’ı da HTTPCOntext isimli bir property’ye sahiptir. Buradaki HTTPContext’in altında Current property’si olmadığı için hata alınır.

HttpContext.Current kısmını System.Web.HttpContext.Current şeklinde değiştirmek gerekir.

Bu taslaktaki bölümler yavaş yazılıp yayınlanacak

Sıralı bir şekilde toparlanıp yazı yapılacak.

Poliformizm

MVVM : Uygulamadaki kavramların birbirinden ayrık olması. Arkayı düzgün yazarsan projeyi al mobile de ayarla.

MVC :

MVC Yaşam Döngüsü: Browser(Request) -> Global.asax(Routing Module) -> Controller ( Gideceği yeri kontrol edip metodu parse eder. ) -> Controller.InvokeAction -> Return View(View (View REsult) -> HTML(View Engine) ) ->Browser(Response)

ViewData[“Food”]= tip dönüşümü gerekli.

ViewBag.Food -> direkt kullan

TempData[“Food”] =sessionda depolanan data

Session[“Food”]= ViewData o an oluşturulur ve sayfa yüklemesi bitince silinir. Session’da ise o session boyunca o kayıt durur.

String ile StringBuffer(String Builder arasındaki fark)

String objesi değiştirilemez; StringBuffer /Builder değiştirilebilir.

StringBuffer syncroned; StringBuilder notsyncronized

StringBuilder da arkada yeni bir nesne oluşturup , onu değiştiriyoruz.

Thread için Buffer; yoksa Builder daha iyi.

 

Struct : Aralarında mantıksal bir ilişki bulunan farklı türden bilgilerin mantıksal bir bütün olarak ifade edilmesidir.

Class ile Struct arasındaki fark sınıflar referans türünde yapılırken yapılar ise değer türündendir. Yapılar stack, sınıflar heap. Sınıflara referans aracılığıyla yığınlara doğrudan ulaşabiliriz.

OOP Kavramları

Abstract Class :  Abstract kalıtımı zorunlu kıldığı için tercih edilmiyor. Soyut yöntem demek alt sınıfta tekrar tanımlanması zorunlu yöntemdir. Ancak yöntemler soyut olur. Soyut sınıflarda

Override: Türetildiği sınıftaki metodu ezmek.

Overload : Aynı isimli farklı parametre sayılı metodlar.

Encapsulation : Dış etkilerden koruma Oluşturduğumuz metod, sınıflama erişimleri sınırlandırır. Burada public, protected, private, default(internal)

Nested(Gömülü) Class : Bir sınıf içerisinde başka bir sınıfın tanımlanmasıdır. Statik ve statik olmayan diye 2’ye ayrılır.

Faydaları: Sınıfların mantıksal gruplanması, Daha iyi encapsulation, kod okunabilirliği

Inner Class: Static olmayan nested classlardır.

Constructor 

Interface(CAN DO)’larda metodların içerisini doldurmayız. Abstracta doldururuz ve bütün alt sınıflarda aynı özellikler olur.

Interface ile yapabileceğimiz herşeyi abstract class ile de yapabiliriz.

Alt sınıflarda default özellik isteniyorsa abstract class mantıklı. Ayrıca hız açısından da iyidir. Interface’de kaç sınıf implement etsek o kadar metodu yazmamız lazım.

ViewState : Verileri saklamak için default olarak kullanılan teknik. Sayfa post back olduğunda ve geri geldiğinde aynı sayfadaki değerlerin saklanması işlemidir.

Get/Post : İstekte bulunurken get adres satırında görünür. post görünmez. Post yavaştır. get veri çekmek ; post veriyi düzenlemek için

Clustered Index: Unique

UnClustered Index : Adresleme

 

Javascript Kuralları, Design Patterns

 

 

c# methodları

Clone() Methodu :

Yeni oluşturduğumuz bğir datatable’a var olan bir datatable yapısını set eder. Klonlandığı datatable’ın sadece kolonları ve kolon tiplerini alır datasını kopyalamaz.

DataTable dtAsus=newDataTable();dtModels= dsPCModels.Tables[0].Clone();

Select() Methodu :

Elimizde var olan bir datatable verileri üzerinde bir kısıtlama işlemi yapıyorsak Select()  metodu ile ihtiyacımız olan datayı seçebiliriz. Metodu parametresiz çağırdığımızda tüm datatable kopyalanacktır.

DataRow[] result = table.Select(“Year >= 30 AND Department = ‘IT'”);

Copy() Methodu:

Var olan bir tablonun yapısını ve datalarını yeni bir datatable‘a kopyalar.

DataTable dt= dtMobiles.Copy();

CopyToDataTable() Methodu:

Datarow diziisini datatable a kopyalar.

DataRow[] drw = dtStudents.Select();

DataTable dt = drw.CopyToDataTable();

Compute(“SUM(),””) Metodu :

Elimizdeki datatable’ın belirli kolonundaki verilerin toplamını object türünde verir.

object toplamOgrenciNot = m_DtTahsilatOran.Compute(“SUM(OgrenciNot)”, “”);
int notlarToplami= Convert.ToInt32(toplamOgrenciNot);

Convert string to Date :

string date =’21-11-2017′;

DateTime.ParseExact(date, “dd-MM-yyyy”, CultureInfo.CurrentCulture);

C# ta İki DataTable’ı tek bir data table da birleştirme

DB ile connection Stringleri ya da kullandığımız katmanlı yapılarla DB’den çektiğimiz dataset veya datatable’ları birleştirmek için öncelikle kolon sayılarının eşitliliği ve uyumluluğu gereklidir.

Burada DataTable’lara datayı getirdiğimizi varsayarak devam edeceğim. DtDeveloper ve DtTester diye isimlendirdiğim iki tablo yu atayacağım tablonun ismine DtTeam diyorum.
DataTable dtTeam=new DataTable(“Project Teams”);

eATMBackOffice eATMSmart = new eATMBackOffice();
dsSmartATM = eATMSmart.SubeATMKasaListesi(m_DatabaseLayer, branchCd);

for (int i = 0; i < dtDeveloper.Columns.Count; i++)
{
dtTeam.Columns.Add(dtDeveloper.Columns[i].ColumnName, typeof(string));
}

foreach (DataRow drDeveloper in dtDeveloper.Rows)
{
dtTeam.Rows.Add(drDeveloper .ItemArray);
}
if DtTester != null && DtTester .Tables[0].Rows.Count > 0)
{
DtTester = DtTester .Tables[0];

foreach (DataRow drTester in DtTester .Rows)
{
dtTeam.Rows.Add(drTester.ItemArray);
}
}

Merge ve Copy de kısaca değin