Veysel Uğur KIZMAZ

Asp.Net MVC Sayfalar Arası Parametre Gönderme - Route Value - Query String

16.06.2012Okunma Sayısı: 22605Kategori: ASP.NET MVC

 Bu makalemizde Asp.Net MVC ile sayfalar arası parametre gönderme işlemlerini inceleyeceğiz. Bu işlem için birkaç yöntem var. Sırasıyla neler olduklarını inceleyelim.

 
1. Routing Value
 
Global.asax dosyasından yapılan ayarlamalarla sayfalar arası gönderilecek parametrelerin belirlendiği yapıdır. Varsayılan olarak burada ayarlama yapılır, parametre (isteğe bağlı olarak) gönderilirse değeri sayfanın Action methodundan alınır. Bir örnekle inceleyelim.
 
Örneğimizde YaziController isminde bir Controller olsun. Bu Controller içinde Index() ve Yazi() isminde 2 Action olsun. Bu sınıfın kodlarını birazdan inceleyeceğiz. Ama öncelikle Global.asax dosyamızdaki bahsettiğimiz yapıyı inceleyelim.
 
 
  1. public static void RegisterRoutes(RouteCollection routes)
  2. {
  3.     routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
  4.  
  5.     routes.MapRoute(
  6.         "Default"// Route name
  7.         "{controller}/{action}/{id}"// URL with parameters
  8.         new { controller = "Yazi", action = "Index", id = UrlParameter.Optional } // Parameter defaults
  9.     );
  10. }

 

 
RegisterRoutes methodunda Action yönlendirmelerinin nasıl yapılacağı bilgisi tutulur.  Bu örnekteki yapıyı inceleyelim:
 
 
  1. "{controller}/{action}/{id}"
 
Sayfamızın linkinde ilk parametremiz controller’ın ismi. (Yazi). İkinci parametremiz Action’ımızın ismi (Index). Üçüncü parametremiz action’a gönderdiğimiz “id” isminde Routing Value.
 
Şimdi YaziController’daki Action methodlarımızı ve her Action’ın View’larını oluşturalım.
 
YaziController.cs
 
  1. public class YaziController : Controller
  2. {
  3.     public ActionResult Index()
  4.     {       
  5.         return View();
  6.     }
  7.  
  8.     public ActionResult Yazi()
  9.     {
  10.         var routeValue = RouteData.Values["id"];
  11.         ViewBag.GelenId = routeValue;
  12.         return View();
  13.     }
  14. }

 

 
Burada RouteData.Values ile Global.asax’da tanımladığımız “id” parametresinin değerini (gönderdiğimiz taktirde) alıp routeValue değişkenine aktarmaktayız.
 
Şimdi Index.cshtml dosyamıza gidelim ve buradan Yazi.cshtml’e yönlendirme linkini aşağıdaki gibi ekleyelim.
 
Index.cshtml
 
  1. @{
  2.     ViewBag.Title = "Index";
  3. }
  4. @Html.ActionLink("Yazı", "Yazi", new {id = 1 }) |
 
Buradaki kod, bulunduğumuz controller’da Yazi isimli Action’a yönlenmeyi sağlayan bir link oluşturuyor ve bu linkte Id değişkeninin Global.asax’da tanımlandığı yere 1 değerini atıyor. Projemizi çalıştırıp nasıl olduğuna göz atalım.
 
 
Yazı linkinin üzerine geldiğimizde aşağıda hangi sayfaya yönleneceğini görüyoruz. Global.asax’daki tanımlamamıza benzer bir şekilde Controller/Aciton/Id parametreleri dahilinde değerlerimizi yerleştirdik. 1 değerini ekranda göstermek için Yazar.cshtml kodumuzu aşağıdaki gibi düzenliyoruz.
 
Yazar.cshtml
 
  1. @{
  2.     ViewBag.Title = "Yazi";
  3. }
  4. <p>
  5.     Gelen Id : @ViewBag.GelenId
  6. </p>
Şimdi projemizi çalıştıralım ve Yazı linkine tıklayalım.
 
 
 
2. QueryString
 
İkinci yöntem ise parametre olarak Global.asax dosyamızda tanımlamadığımız bir parametreyi QueryString şeklinde göndermektir. Bu işlemi bir örnek üzerinde inceleyelim.

YaziContoroller’ımıza yeni bir Makale isminde yeni bir Action (ve View’ını) ekleyelim ve kodunu aşağıdaki gibi düzenleyelim.
 
YaziController.cs
 
  1. Public ActionResult Makale()
  2. {
  3.     var makaleId = Request.QueryString["makaleid"];
  4.     ViewBag.MakaleId = makaleId;
  5.     return View();
  6. }
 
Index sayfamızdan buraya QueryString parametresi olarak “makaleid”yi gönderiyoruz ve buradan Makale View’ına MakaleId’yi parametre olarak gönderiyoruz.
 
Şimdi Index.cshtml dosyamızdan Makale sayfamıza yönlendirme linkini yerleştirmek için burayı aşağıdaki gibi düzenleyelim.
 
Index.cshtml
 
  1. @{
  2.     ViewBag.Title = "Index";
  3. }
  4.  
  5. @Html.ActionLink("Yazı", "Yazi", new {id = 1 }) |
  6. @Html.ActionLink("Makale","Makale",new {makaleid = 1})
Son olarak Makale.cshtml View’ına gidelim ve burada MakaleId değerini ekranda gösterelim.
 
Makale.cshtml
 
  1. @{
  2.     ViewBag.Title = "Makale";
  3. }
  4.  
  5. <p>
  6.     Makale Id : @ViewBag.MakaleId
  7. </p>
Projemizi çalıştıralım ve Index sayfasına göz atalım.
 
 
Makale linkinin üzerine geldiğimizde link olarak Controller/Action?querystring=value şeklinde QueryString’in verildiğini görüyoruz. Şimdi Makale linkine tıklayalım ve değerimizin sayfaya gelip gelmeyeceğine bakalım.
 
 
Göründüğü üzere, MakaleId değerimizi sayfamızda kullanabildik.
 
 
 
Veysel Uğur KIZMAZ
Bilgisayar Mühendisi
veysel@ugurkizmaz.com
www.ugurkizmaz.com