Başlangıç

Asp.NET C# FileUpload Nesnesi Kullanımı (Dosya Yükleme)

2 Yorum


Fileupload kontrolünün kullanımı, metodları, Basit kodlarla alınabilecek güvenlik önlemlerini yaptığımız bir örnek;

uyeol.aspx Sayfamıza bir adet fileupload nesnesi (Id=uploadresim), bir adet buton (Id=btnresimyukle), bir adet image (Id=Imageyukresim), bir adet label(Id=lblresimsonuc) ve sadece resim yükleme kontrolüyapmak için RegularExpressionValidator (Id=RegularExpressionValidator2)  ekledik. Ben üye ol sayfasında kullandığım için aşağıdaki görseller oradan alındı.

fileupload1 fileupload2RegularExpressionValidator nesnesinin  ControltoValidate özelliğine  fileupload nesnesini bağlamalı ve Validate Expression içinede sadece istenen uzantılar için ^.+\.((jpg)|(gif)|(jpeg)|(png)|(bmp)) yazmak gerekiyor.

uyeol.aspx.cs sayfamızda olayımız şöyle olacak;

protected void btnresimyukle_Click(object sender, EventArgs e)
{
if (uploadresim.HasFile)
{
if (uploadresim.PostedFile.ContentLength > 1024000)
{
lblresimsonuc.Text = “Seçtiğiniz Dosyanın Boyutu Tanımlanandan Daha Büyük!”;
}
else
{

uploadresim.SaveAs(Server.MapPath(“resimler/”) + uploadresim.FileName);//inen dosyanın kaydedileceği yer ve isim
lblresimsonuc.Text = “Dosya Eklendi. Dosya Boyutu:” +Convert.ToString(uploadresim.PostedFile.ContentLength);//dosya yükleme biligileri
lblresimsonuc.Text = lblresimsonuc.Text + ” Dosya Türü:” + uploadresim.PostedFile.ContentType;
Imageyukresim.ImageUrl = “~/resimler/” + uploadresim.FileName;//yüklenen dosyayı image nesnesinde göster
Imageyukresim.Visible = true;
Imageyukresim.Width = 300;
Imageyukresim.Height = 300;
Session[“resimyolu”] = “resimler/” + uploadresim.FileName;//bana dosya yolu lazımdı. onun için yazdım olmasada olur.
}
}
else
{
Response.Write(“Dosya Yükleme Hatası”);
Session[“resimyolu”] = “resimler/herkesinresmi.jpg”;//bana dosya yolu lazımdı. onun için yazdım olmasada olur.
}

Not: Bu sınıfın özellikleri.

Fileupload kontrolünü toolboxdan sürükleyerek formunuza taşıdığınızda kontrolümüzün diğer kontrollerden farklı olarak birkaç özellik,fonksiyon veya alt yordamı var.

.filebytes Gönderilen dosyanın içeriğini byte cinsinden getirir
.filecontent Gönderilen dosyayı stream cinsinden alır
.filename dosyam.uzanti şeklinde dosya adını döndürür
.postedfile HttpPostedFile classını çağırır
.saveas c:\klasor\dosyaadi.uzanti şeklinde verdiğimizde o konuma kaydeder

postedfile sınıfı ve alt yordamları;

.contentlength Dosyanın boyutunu byte olarak döndürür(örnekte dosya boyutunu daha şık göstermenize yardımcı olabilecek bir fonksiyon mevcut)
.contenttype Dosyanın türünü döndürür jpeg için image/pjpeg olabilmektedir örneğin.
.filename Dosyanın kullanıcı bilgisayarındaki yolunu gösterir. e:\klasorum\dosya.jpg gibi
.inputstream Dosyanın içeriğini stream olarak gönderir. Üstteki Fileupload kontrolünün filecontentiyle aynıdır
.saveas Dosyayı belirtilen yere kaydetmeye yarar. Fileupload kontrolünün save as iyle aynıdır

Son olarak web.config dosyasında tüm sayfanın geneli için ayarlama yapmak gerekebilir.

<configuration>
<system.web>
<compilation debug=”true” targetFramework=”4.0″/>
<httpRuntime executionTimeout=”3600″ maxRequestLength=”51200″ />
</system.web>
</configuration>
<!–maxRequestLength özelliği si limiti aşıp aşmadığını kontrol etmek için
executionTimeout si de kötü amaçlı kişileri engellemek için..
Örneğin çok güçlü bağlantıya sahip olan biri siteye
1 gb lık dosya gönderip sunucunun internet trafiğini
yavaşlatmak isteyebilir.
executionTimeout=”3600″ bu 1 saate denk gelir.. Sunucu 1 saatten sonra veri alımını iptal eder
maxRequestLength=”51200″ bu da KB cinsinden veri boyutudur. Bunu aştığında veri alımı iptal eder
Bu ayarlar dosya olsun olmasın tüm istekler için geçerlidir.
O yüzden burayı ayarlarken dikkatli olmalısınız–>

Reklamlar

Asp.NET Tarayıcı Bilgisine Ulaşma (Bu bilgiler kesin doğru alınmayabilir.)

Yorum bırakın


sayfanızın görüntülendiği tarayıcıyı belirlemek için

*.aspx.cs dosyası;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; //sisteme ekliyoruz.

protected void Page_Load(object sender, EventArgs e)
{
HttpBrowserCapabilities tarayicibilgisi = Request.Browser;
string name = tarayicibilgisi.Browser;
float version = (float)(tarayicibilgisi.MajorVersion + tarayicibilgisi.MinorVersion);
if (name == “IE” && version >= 7)
{
Response.Write(“IE 7 Kullanılıyor”);
}else if(name == “Firefox” && version >= 2)
{
Response.Write(“Firefox 2 kullanılıyor”);
}
}

ASP. NET’te WebClient Sınıfı Kullanımı

Yorum bırakın


Hergangi bir yerel veya uzak kaynaktan veri gönderme ve bir kaynaktan veri almada birden fazla yöntem sağlar. Bu işlemleri yapmak için System.Net.WebClient sınıfı kullanılır.

Bu sınıfa ulaşmak için;

using System.Net; //eklenmesi gerekir.

Temel olarak sınıfı tanımlamak için;

WebClient olusanclient = new WebClient();

String result = olusanclient.DownloadString("http://www.deneme.com");

Temel olarak metotları;

1. Dosya indirme DownloadFile();

Genel Kullanımı;

<<WebClient Nesnesi>>.DownloadFile(<<URL adresi>>, <<Kayıt yapılacak Dosya Yolu>>);

Eğer sadece URI ‘yi diske kaydettmek istiyorsak, Yukarıdaki gibi DownloadFile metodunu kullanabiliriz. Uygulamamızda web sayfamızdan gelen datayı işlemek istiyorsak OpenRead metodundan faydalanabiliriz. Aşağıdaki örnek bir web sayfasının kaynak kodunun okunması ile ilgilidir.

Örnek Kullanım;

WebClient olusanclient= new WebClient();

olusanclient.DownloadFile(“http://www.google.com&#8221;, “C:\\google.html”);

ileri örnekler için StreamReader nesnesi anlatımından sonra.

2. DownloadData();

Kaynak adresteki veriyi bir bayt dizisi olarak indirir.

Genel Kullanımı;

<<WebClient Nesnesi>>.DownloadData(<<indirilecek URL>>);

Örnek Kullanım;

WebClient olusanclient= new WebClient();

olusanclient.DownloadData(“http://deneme.com/ornek.rar&#8221;);

3. DownloadString()

Bir URL isteği yanıtları (kaynağı) indirilir veya bir akışa yazılabilir. En göze çarpan özelliği bu akışlar içerisinden istenen veri aranabilir.

Genel Kullanımı;

<<WebClient Nesnesi>>.DownloadString(<<indirilecek URL>>);

Örnek Kullanım;

WebClient client = new WebClient();
string sonuc = client.DownloadString(“http://zonguldakeml.k12.tr&#8221;);
Response.Write(sonuc);

4. OpenRead()

Uygulamamızda web sayfamızdan gelen datayı işlemek istiyorsak OpenRead metodundan faydalanabiliriz. Aşağıdaki örnek bir web sayfasının kaynak kodunun okunması ile ilgilidir.

Genel Kullanımı;

<<WebClient Nesnesi>>.OpenRead(<<indirilecek URL>>);

Örnek Kullanım;

WebClient wClient = new WebClient();
Stream st = wClient.OpenRead(“http://www.google.com&#8221;); //bu sınıfı ileride ele alacağız

5. OpenWrite()

WebClient sınıfının OpenWrite isimli metodu ise, bize URI ‘ ye data gönderebilmemiz için yazılabilir stream döner.

Genel Kullanımı;

<<WebClient Nesnesi>>.OpenRead(<<indirilecek URL>>,<<Gönderme Metodu(get,Post)>>);

Örnek Kullanım;

WebClient wClient = new WebClient();
Stream st = wClient.OpenWrite(“http://localhost/deneme/Default.aspx&#8221;,”POST”);//bu sınıfı ileride ele alacağız

….

6. UploadData()

aspx sayfamıza hem post edip hem de dönen sonucu işlemek için WebClient sınıfının UploadData metodundan faydalanabiliriz. UploadData metodu post edilecek datayı byte dizisi olarak alıp, sonucu yine bize byte dizisi olarak dönmektedir.

WebClient wClient = new WebClient();
byte[] postData = Encoding.ASCII.GetBytes(“csharp”);
byte[] response = wClient.UploadData(“http://localhost/SimpleWebSite/Default.aspx&#8221;, “POST”, postData);
MessageBox.Show(Encoding.ASCII.GetString(response));

7. UploadFile() ve Authentication

UploadFile metodu belirtilen yere, local dosyamızı upload eder. Authentication için gerekli bilgileri Credentials property ‘sine set edebiliriz.

WebClient wClient = new WebClient();
NetworkCredential oturumbilg = new NetworkCredential(“kulad”, “şifre”);
wClient.Credentials = oturumbilg;
wClient.UploadFile(“http://localhost/SimpleWebSite/a.txt&#8221;, “C:\\a.txt”);

Kaynak;

http://www.csharpnedir.com/articles/read/?id=604

http://flylib.com/books/en/4.451.1.178/1/

http://msdn.microsoft.com/en-us/library/system.net.webclient(v=vs.80).aspx

 

Asp.Net MVC 3 ViewBag ve ViewData Arasındaki Fark -6

1 Yorum


Asp.Net MVC 3 içerisinde Controller sınıfının view’e gönderdiği nesnelerin bilgileri  Controller’in miras aldığı ControllerBase sınıfı üzerinde yer alan ViewBag ya da ViewData propertylerinde tutulmakta.Böylece Controller üzerinden gelen bilgiler sayfa render edilirken ilgili alanlara aktarılmakta. WebForms ile çalışanların hatırlayacağı üzere bu 2 property ViewState’in MVC tarafındaki işlevselliğini yapıyor denilebilir ama ViewState’den davranışsal temel farkı üretilen sayfa üzerinde herhangi bir ekstra html içerik üretmemesidir.

Peki bu 2 özellik arasında ne gibi bir fark.Neden aynı işlevi yapan 2 farklı özellik var. Bu sorunun basit cevabı:

ViewBag ile ViewData arasından birisini seçmek açısından gerçek anlamda teknik olarak bir avantaj yok.Gerçek anlamda ile kasıt ikisi de aynı işlevi yapmakta ama fark biri yerine diğeri kullanılmasından kaynaklanacak sonuçlar. Temel fark ViewBag’in dinamik bir tip olması. Dinamik tip (dynamic)  tip kontrolü işlemine derleme anı (compile time) yerine çalışma anı (runtime) seviyesinde izin verdiğinden bu durumdan kaynaklanan farklılıklar mevcut.

  1.Fark

ViewBag, key’e ulaşılmaya çalışıldığında sadece C#’da geçerli olan bir tanımlayıcı olması durumunda çalışır.

1
ViewData["Status Code"];

şeklinde tanımlanan bir status code değerine ViewBag ile ulaşılamaz.Çünkü

1
ViewBag.Status Code

hatalı bir tanımlama‘dır.

 2.Fark

Dinamik değerler genişletme metodlarına (extension methods) parametre olarak gönderilemezler.Çünkü C# derleyicisi derleme anında  her parametrenin gerçek tipini bilmek zorundadır doğru genişletme metodunu çağırabilmek için.

1
@Html.TextBox("name",ViewBag.Name)

hatalı bir tanımlama‘dır. Şu şekilde yapılabilir:

1
2
3
4
5
//Birinci Alternatif
ViewData["name"]
//İkinci Alternatif
(string) ViewBag.Name

Kaynak:

http://ercanaydogan.com/post/2011/12/17/AspNet-MVC-3-(Ipucu)-ViewBag-ve-ViewData-Aras%C4%B1ndaki-Temel-2-Fark.aspx

Diğer bir ViewBag Örnek Kullanım;

HomeController’da Index() methoduna gidelim. 
public ActionResult Index()
{
ViewBag.Message = “Hoşgeldiniz ASP.NET MVC!”;
var yazilimgelistir = new List<string>
{
“Hasan KAÇAN”,”Ali UÇAN”,”Veli BİLEN”,”Halis GÖREN”,”Kemal ÖRTEN”
};
ViewBag.yazilimgelistir = yazilimgelistir;
return View();
}
index.aspx içine razor yapıda kodu yazıyoruz.
<h2>@ViewBag.Message</h2>
<ul>
@foreach (var gelistirici in ViewBag.yazilimgelistir)
{
<li>
@gelistirici
</li>
}
</ul>

Diğer bir ViewData Örnek Kullanım;

HomeController’da Index() methoduna gidelim. 
public ActionResult Index()
{
var yazilimgelistir = new List<string>
{
“Hasan KAÇAN”,”Ali UÇAN”,”Veli BİLEN”,”Halis GÖREN”,”Kemal ÖRTEN”
};
ViewData[“yazilimgelistir”] = yazilimgelistir;
return View();

}

index.aspx içine razor yapıda kodu yazıyoruz.
<ul>
@foreach (var gelistirici in (List<string>)ViewData[“yazilimgelistir”])
{

<li>
@gelistirici
</li>
}
</ul>

ASP.NET MVC VIEWBAG, VIEWDATA, TEMPDATA -5

1 Yorum


Controller sınıfları ve View sayfaları arasında veri taşımamıza yardımcı olacak nesneler vardır. Bunlardan en önemlisi ViewData, ViewBag ve TempData nesneleridir.

ViewData: Teknik olarak veri Controller sınıfından View sayfalarına ViewDataDictionary (ViewData) sınıfı ile taşınmaktadır. ViewData nesnesine veri aktarabilir ve bu veriyi okuyabiliriz.

     ViewData[“CurrentTime”] = DateTime.Now;
 
ViewBag: ViewBag ise ASP.NET MVC 3 te C# 4 ile gelen dynamic anahtar kelimesinin getirdiği bir yeniliktir. ViewData nın dinamik (run time binding) halidir. Söz dizimi de daha iyidir.
    ViewBag.CurrentTime = DateTime.Now;
 
TempData: Bu nesne de diğer ikisinin yaptığı işi yapar.TempData[“CurrentTime”] = DateTime.Now;Bu üç nesne arasında küçük ve kritik farklar vardır. Örneğin ViewBag nesnesi dynamic tipinde bir nesne olduğundan bununla alakalı hatalar compile time da değil run time da yakalanır. Teknik anlamda ViewData nesnesinden farkı yoktur. Söz dizim olarak farklıdır.En büyük ve önemli fark TempData ile diğer ikisi arasındadır. ViewData ve ViewBag nesnesi o anki HTTP istek içerisinde geçerlidir. Yaşam döngüsü bir sonraki isteğe kadardır. Ama TempData bir alt HTTP istek içinde geçerlidir. Yaşam döngüsü o anki ve bir sonraki HTTP istek içerinde geçerlidir. Daha iyi anlamak için bir örnek;ÖRNEK 

Üç nesnenin örnek kullanımı ve çıktısı.

Controller

1
2
3
4
5
6
7
8
public ActionResult Index()
{
    ViewBag.Message1 = "ViewBag mesaj!";
    ViewData["Message2"] = "ViewData mesaj!";
    TempData["Message3"] = "TempData mesaj!";
    return View();
}

View

1
2
3
<h2>@ViewBag.Message1</h2>
<h2>@ViewData["Message2"]</h2>
<h2>@TempData["Message3"]</h2>

Çıktı
ViewBag mesaj!ViewData mesaj!TempData mesaj!

ÖRNEK 
TempData nesnesinin farklı özelliği.

Controller/Index

1
2
3
4
5
6
7
8
public ActionResult Index()
{
    ViewBag.Message1 = "ViewBag mesaj!";
    ViewData["Message2"] = "ViewData mesaj!";
    TempData["Message3"] = "TempData mesaj!";
    return RedirectToAction("About");
}

Contoller/About

1
2
3
4
5
6
public ActionResult About()
{
    var message = TempData["Message3"];
    return View();
}

Index metodu içerisinde oluşturduğumuz TempData About metoduna aktarılır ama diger iki nesne debug ta baktığımızda null olacaktır. TempData ile geçirdiğimiz veriyi About.cshtml içerisinde bir önceki örnekteki gibi kullanabiliriz.

TempData için sakıncalı bir durum yönlendirdiğimiz About sayfası içerisindeyken sayfası yenilediğimiz zaman veriyi kaybederiz. Bundan dolayı TempData yerine bu işlemleri ViewModel mantığı kullanmalıyız.

Peki bu nesneleri ne zaman kullanmalıyız.

  • Model sınıfımıza ait bir veriyi açılır listeden (drop down list) seçeceksek bu listenin verisi için kullanabiliriz.
  • Küçük ölçekli veriler.
  • Kullanıcıya verilen uyarı mesajları.
  • Örneğin kullanıcı kayıt olduktan sonra kullanıcıya gösterilen profil özeti ekranı.
Kısacası geçici olarak tanımlayabileceğimiz küçük ölçekli verileri içeren bir çok iş için kullanabiliriz.
Kaynak:

Asp.Net MVC 3’te ViewBag Kavramı -4

1 Yorum


ViewBag, MVC’de Dynamic View Data oluşturmayı sağlamaktadır. Dynamic View Data Dictionary, Runtime’da (çalışma anında) işleyen ve Controller ile View arasında veri transferini sağlayan yapıdır. Asp.Net’te aspx formumuza server side verileri, code behind’dan (aspx.cs) gönderiyorduk. MVC’de benzer işlemi ViewBag, ViewData vb. yapılarla aktarıyoruz. Öncelikle ViewBag Kullanımı;

HomeController’da Index() methoduna gidelim. ViewBag. yazalım ve çıkan açıklama metnini inceleyelim.

mvc6“This operation will be resolved at runtime” : Çalışma zamanında çözümlenecek olan kod bloğudur. Burada istediğimiz türden veriyi Index.aspx formumuza gönderebiliriz. Şimdi bir örnek ile nasıl yapıldığını inceleyelim.

public ActionResult Index()
{
    ViewBag.Message = “Hoşgeldiniz ASP.NET MVC!”;
 
    List<string> yazarlar = new List<string>
    {
        “Hasan KAÇAN”,
        “Ali UÇAN”,
        “Veli BİLEN”,
        “Halis GÖREN”,
        “Kemal ÖRTEN”
    };
    ViewBag.YazarListesi = yazarlar;
 
    return View();
}

List<string> türünden yazar listemizi oluşturup bu listeyi sayfada gösterelim. Bunun için bu değişkenimizi ViewBag ile Index.aspx’e gönderiyoruz.
ViewBag’a YazarListesi özelliği oluşturuyoruz ve yazarlar listemizi bu değişkene atıyoruz. Şimdi Index.aspx sayfamıza gidelim ve YazarListesi’nin değerlerini alt alta ekranda yazalım.
<%@ Page Language=”C#” MasterPageFile=”~/Views/Shared/Site.Master” Inherits=”System.Web.Mvc.ViewPage” %>
 
<asp:Content ID=”Content1″ ContentPlaceHolderID=”TitleContent” runat=”server”>
    Anasayfa
</asp:Content>
 
<asp:Content ID=”Content2″ ContentPlaceHolderID=”MainContent” runat=”server”>
    <h2><%: ViewBag.Message %></h2>
    <p>
        <% List<string> yazarlar = ViewBag.YazarListesi;
           foreach (var yazar in yazarlar)
           { %>
       
            <%:yazar %><br />
       
        <%}%>
    </p>
</asp:Content>
Kaynak:
Razor ile kullanımı:
mvc_1
mvc_3
Burada kırmızı çerçeveli alanda Razor seçin.
HomeController’da Index() methoduna gidelim. 
public ActionResult Index()
{
ViewBag.Message = “Hoşgeldiniz ASP.NET MVC!”;
var yazilimgelistir = new List<string> //bu şekildede liste oluşturulur yukarıdaki koddan farklı değil.
{
“Hasan KAÇAN”,”Ali UÇAN”,”Veli BİLEN”,”Halis GÖREN”,”Kemal ÖRTEN”
};
ViewBag.yazilimgelistir = yazilimgelistir;
return View();
}
mvc_4
index.aspx içine razor yapıda kodu yazıyoruz.
<h2>@ViewBag.Message</h2>
<ul>
@foreach (var gelistirici in ViewBag.yazilimgelistir)
{
<li>
@gelistirici
</li>
}
</ul>
Sonuç:
mvc7

Asp.Net MVC 3 Razor View Engine Kullanımı -3

1 Yorum


Razor da Aspx gibi bir görüntüleme motorudur (view-engine). MVC3 den sonra (MVC3 ve MVC4) gelmiştir.
Web forms ile geliştirdiğiniz bir projeye bazı özellikler eklemem gerekti diye sürekli <% %> etiketleri eklemekten bıktıysanız razor yeni bir bakış açısı getiriyor.
Razor un avantajları:

  • Düzenli, etkileyici ve akışkan: Sayfadaki karakter sayısını en aza indirir, okunurlugu yuksek, duzenli ve kolay bir akıs saglar.
  • Öğrenmesi kolay: .net ve html kodlarını birbiri içerisinde zorlanmadan kullanmayı sağlar. .net kodlarına başlamadan sadece @ işaretini koyarsınız ve Razor kodları rahatlıkla ayrıştırır.
  • Yeni bir dil değildir: Yeni bir dil değil , bilinen bir dilin (C#, VB, Html) daha iyi ve anlaşılır olarak yazılmasını sağlar.
  • Çok iyi deyim tamamlama desteği (intellisense): Herhangibir kod editoru veya bir araç kullanmadan rahatlıkla geliştirilebilir olmasına ragmen, visual studio, tam bir deyim tamamlama(intellisense) destegi sunar.
  • Birim Test: Conroller ve ya web server gerektirmeden, birim test edilebilir özelligi vardır.

Sayfa Düzeni (Layout) Yapacağımız projelerde sayfanın düzenini basit ve dinamik bir şekilde kontrol etmek  için;

  • Html.RenderPartial bu methodla Shared yada ilgili kontrolün altında belirttiğiniz sayfayı, sayfanıza çağırmaya olanak sağlar. Bir nevi include file gibidir.
  • @{Html.RenderPartial(“_menu”);} Şeklinde kullanıyoruz, bu kodu yazdığımız yere Shared klasörü içerisinde ki yada ilgili kontrol klasörü içindeki _menu.cshtml sayfası çağrılır. Çağırırken uzantıyı yazmamıza gerek yoktur, otomatik olarak aspx, ascx, cshtml ve vbhtml uzantılarında ilgili sayfayı bulur.
  • RenderPage Yukarıda ki kontrolün aynısı gibi çalışır, tek fark çağırırken tam yolu vermemiz gerekir. Bu sebepden dolayı çağıracığımız dosyanın bulunduğu klasörün bir önemi yoktur, istediğimiz dosyadan istediğimiz sayfayı çağırabiliriz.
  • @RenderPage(“~/Views/Home/_test.cshtml”) şeklinde kullanıyoruz.
  • Yukarıda ki iki yöntemde de data yı ilgili sayfalara gönderebiliyor ve o sayfalarda işlem yapabiliyoruz.
    1
    2
    @{Html.RenderPartial("_menu",Model);}
    @RenderPage("~/Views/Home/_test.cshtml",ViewBag.dinamik)
  • RenderSection bu yöntem ile sayfa içinde ki kod bloğunu farklı bir yerde göstermek için kullanıyoruz. Yukarıdaki yöntemlerin aksine dışarıdan değil içeriden çağırma işlemini yapıyoruz.
  • @RenderSection(“menu”, false) diyoruz, burada ki false gerekliliği ifade ediyor. Sonrasında görüntülenecek section bloğunu yazıyoruz. @section menu{<h1>menu</h1>}

Razor Sözdimi (Syntax)

  • Razor view engine kodlarının başına @ işareti koyuyoruz. Fakat bir mail adresini elle yazmak istediğimizde sıkıntı oluyor. Bunu ortadan kaldırmak için 2 tane @@ ile yazıyoruz. test@@test.com gibi..
  • Dinamik kodlarla html kodlarını iç içe yazdığımız bu yapıda nokta(.) simgesi başımızı ağırta biliyor. Yani @degisken.yazdığımızda ToString(), ToLower() gibi methodların listelendiğini görürüz halbu ki biz sadece nokta koymak istiyoruz. Bunun için@(degisken). şeklinde değişkeni parantez içine almamız yeterlidir.
  • Bir if bloğu yada herhangi bir kod bloğu içinde direk metin yada html kodu yazmamız gerekebilir. Bunun için razor bize 2 farklı yöntem sunuyor. İlk yöntemde tek satırlık yazımlar için @:tek satırlık yazım ve çok satırlı yazımlar için <text>çok satırlı yazım</text>
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    @if (true)
    {
        @:Tek satır yazım.
            <text>
            çok
            satırlı
            yazım
           </text>
    }

ViewBag kullanımı Mvc 3 ile birlikte gelen en önemli özelliklerden bir tanesi ViewBag nesnesi. Mvc 3 öncesinde ViewData[“degisken”] şeklinde view katmanımıza veri gönderiyorduk, eğer gönderdiğimiz veri bizim modelimizse view tarafında  ViewData[“degisken”] nesnesini ilgili modele dönüşümünü sağlıyorduk, yani 2 türlü iş yapıyorduk. ViewBag ile bu durum ortadan kalkıyor, ViewBag var gibi çalışıyor, neyi verirseniz o türe dönüşüyor ve ekstra bir işlem yapmadan kullanabiliyoruz.

01
02
03
04
05
06
07
08
09
10
11
12
//control katmanımız
public ViewResult Index()
{
    ViewBag.dinamik = context.uruns;
    return View();
}
//view katmanımız
@foreach (var item in ViewBag.dinamik)
{
    @item.ozellikAdi
}

Helper Kullanımı Yardımımıza hızlıca koşan helper ları yazmak ve kullanmak için çok güzel bir mekanızma bulunuyor. App_Code içine .cshtml uzantılı bir sayfa ekliyoruz ve içine razor syntaxlarını kullanarak fonksiyonumuzu yazıyoruz ve tüm sayfalardan bu fonksyionlara sayfaAdi.fonksiyon adı şeklinde erişip kullanabiliyoruz.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
  //App_Code klasörümüz içindeki myHelper.cshtml dosyamızın içi
 @helper stokDurumu(int stok){
     if (stok < 1)
     {
         @:Yok :(
     }
     else
     {
         var. @stok adet
     }
 }
//Herhangi bir sayfadan erişilip kullanılması
 @foreach (var item in Model) {
     @myHelper.stokDurumu(item.stok)
 }

Kaynak:

http://www.apostylee.com/razor-view-engine-puf-noktalari/ İlgili sayfada örnek var. İncelemek isteyenler için.
Örnek bir söz dizimi:

1
2
3
4
5
6
7
8
<div>
    @for(int i = 0; i < 10; i++)
    {
        <div class="class_@(i)">
            <span>sayı @(i)</span>
        </div>
    }
</div>

Yukarıdaki kodun html cıktısı:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<span style="font-family: Arial, Helvetica, sans-serif;"><div>
    <div class="class_0">
        <span>sayı 0</span>
    </div>
    <div class="class_1">
        <span>sayı 2</span>
    </div>
    ...
    ...
    ...
    <div class="class_9">
        <span>sayı 9</span>
    </div>
</div></span>

Aynı kodun Aspx deki soz dizimi

1
2
3
4
5
6
7
<span style="font-family: Arial, Helvetica, sans-serif;"><div>
    <% for(int i = 0; i < 10; i++) { %>
        <div class="class_<%: i %>">
            <span>sayı <%: i %></span>
        </div>
    <% } %>
</div></span>

Bir başka örnek;

Örnek Web Forms sözdizimi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ Page Language="C#" MasterPageFile="</Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcMusicStore.ViewModels.StoreBrowseViewModel>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Browse Albums
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <div class="genre">
        <h3><em><%: Model.Genre.Name %></em> Albums</h3>
        <ul id="album-list">
            <% foreach (var album in Model.Albums) { %>
                <li>
                    <a href="<%: Url.Action("Details", new { id = album.AlbumId }) %>">
                    <img alt="<%: album.Title %>" src="<%: album.AlbumArtUrl %>" />
                    <span><%: album.Title %></span>
                    </a>
                </li>
            <% } %>
        </ul>
    </div>
</asp:Content>

Razorun söz dizimi tamamen kod odaklı bir şablonu vardır. İlk bakıldığı anda HTML ve .Net kodları hemen anlaşılır, okunması ve anlaşılması çok kolaydır. Yukarıdaki kodun Razor ile yazılmış hali aşağıdaki gibidir:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@model MvcMusicStore.Models.Genre
@{ ViewBag.Title = "Browse Albums"; }
<div class="genre">
    <h3><em>@Model.Name</em> Albums</h3>
    <ul id="album-list">
        @foreach (var album in Model.Albums)
        {
            <li>
                <a href="@Url.Action("Details", new { id = album.AlbumId })">
                    <img alt="@album.Title" src="@album.AlbumArtUrl" />
                    <span>@album.Title</span>
                </a>
            </li>
        }
    </ul>
</div>

Kaynak:

http://alirizaadiyahsi.blogspot.com/2013/01/razor-aspx.html

Benim toparladıklarım bunlar ayrıca http://www.youtube.com/watch?v=Mh1ExbYkn-0 buradaki videoda güzel.

Older Entries

Bana Silverlight Anlat

meslek lisesi ders notları

Eren ÇOLAK

Yazılım Mühendisi Olmak Yolunda İlerliyor...