Bu makalemizde MVC ile link işlemlerinin nasıl yapıldığını, kendi link methodlarımızı nasıl oluşturacağımızı inceleyelim.
Bu işlem için 2 sınıf methodu üzerinde duracağız.
1. UrlHelper->Action() methodu
Bu method ile action linklerini belirleyebiliriz.
Örnek:
- <a href="@Url.Action("Index","Home")">Anasayfa</a>
<a href="@Url.Action("Index","Home")">Anasayfa</a>
2. HtmlHelper -> ActionLink() methodu
Bu method ile action gerçekleştiren link elemanları oluşturabiliyoruz.
Örnek:
- @Html.ActionLink("Hakkımızda","About","Home")
@Html.ActionLink("Hakkımızda","About","Home")
Şimdi bu iki örneği bir uygulamada deneyelim.
Yeni bir Asp.Net MVC 3 (Empty) Web Application (Razor Engine) oluşturalım.
HomeController isiminde bir Controller ekleyelim.
HomeController içine Index ve About actionlarını ve bu actionların viewlarını ekleyelim.
HomeController.cs
- public class HomeController : Controller
- {
- public ActionResult Index()
- {
- return View();
- }
- public ActionResult About()
- {
- return View();
- }
- }
public class HomeController : Controller { public ActionResult Index() { return View(); } public ActionResult About() { return View(); } }
Index viewından yukarıda bahsettiğimiz ActionLink() methodu ile About viewına, About viewından Action() methodu ile Index viewına link verelim.
Index.cshtml
- @{
- Layout = null;
- }
-
- <!DOCTYPE html>
-
- <html>
- <head>
- <title>Index</title>
- </head>
- <body>
- <div>
- @Html.ActionLink("Hakkımızda","About","Home")
- </div>
- </body>
- </html>
@{ Layout = null; } <!DOCTYPE html> <html> <head> <title>Index</title> </head> <body> <div> @Html.ActionLink("Hakkımızda","About","Home") </div> </body> </html>
About.cshtml
- @{
- Layout = null;
- }
-
- <!DOCTYPE html>
-
- <html>
- <head>
- <title>About</title>
- </head>
- <body>
- <div>
- <a href="@Url.Action("Index","Home")">Anasayfa</a>
- </div>
- </body>
- </html>
@{ Layout = null; } <!DOCTYPE html> <html> <head> <title>About</title> </head> <body> <div> <a href="@Url.Action("Index","Home")">Anasayfa</a> </div> </body> </html>
Projemizi çalıştırıp linklere tıkladığımızda sayfalararası gezebildiğimizi görebileceğiz.
Şimdi kendi Action() ve ActionLink() methodlarımızı oluşturalım.
Bu işlem için dikkat etmemiz gereken en önemli nokta: UrlHelper sınıfı System.Web.Mvc namespace’i, HtmlHelper sınıfı System.Web.Mvc.Html namespace’i altındadır. Bu kriterlere uygun olarak yeni bir class oluşturalım ve kodumuzu yazalım.
- namespace System.Web.Mvc
- {
- public static class BenimUrlHelper
- {
- public static string YeniAction(this UrlHelper link, string action, string controller, string baslik)
- {
- return link.Action(baslik, action, controller);
- }
- }
- namespace Html
- {
- public static class BenimHtmlHelper
- {
- public static MvcHtmlString YeniActionLink(this HtmlHelper helper, string action, string controller, string baslik)
- {
- return helper.ActionLink(baslik, action, controller);
- }
- }
- }
- }
namespace System.Web.Mvc { public static class BenimUrlHelper { public static string YeniAction(this UrlHelper link, string action, string controller, string baslik) { return link.Action(baslik, action, controller); } } namespace Html { public static class BenimHtmlHelper { public static MvcHtmlString YeniActionLink(this HtmlHelper helper, string action, string controller, string baslik) { return helper.ActionLink(baslik, action, controller); } } } }
Şimdi Index.cshtml ve About.cshtml dosyalarımızı aşağıdaki gibi (yeni methodlarımızla) düzenleyelim.
Index.cshtml
- @{
- Layout = null;
- }
-
- <!DOCTYPE html>
-
- <html>
- <head>
- <title>Index</title>
- </head>
- <body>
- <div>
- @Html.ActionLink("Hakkımızda","About","Home") |
- @Html.YeniActionLink("Hakkımızda yeni", "About", "Home")
- </div>
- </body>
- </html>
@{ Layout = null; } <!DOCTYPE html> <html> <head> <title>Index</title> </head> <body> <div> @Html.ActionLink("Hakkımızda","About","Home") | @Html.YeniActionLink("Hakkımızda yeni", "About", "Home") </div> </body> </html>
About.cshtml
- @{
- Layout = null;
- }
-
- <!DOCTYPE html>
-
- <html>
- <head>
- <title>About</title>
- </head>
- <body>
- <div>
- <a href="@Url.Action("Index","Home")">Anasayfa</a> |
- <a href="@Url.YeniAction("Index", "Home")">Yeni Anasayfa</a>
- </div>
- </body>
- </html>
@{ Layout = null; } <!DOCTYPE html> <html> <head> <title>About</title> </head> <body> <div> <a href="@Url.Action("Index","Home")">Anasayfa</a> | <a href="@Url.YeniAction("Index", "Home")">Yeni Anasayfa</a> </div> </body> </html>
Projemizi çalıştırıp sonuçları inceleyelim.
Veysel Uğur KIZMAZ