C# Interface ile ViewData

  1. Insyder
    2
    939
    17.04.2020 19:43:00

    Arkadaşlar merhaba. Bir makale sistemi geliştiriyorum. Aslında yapılacak tüm işlemleri yaptım. Bir kaç gün önce incelediğim orta düzey mvc projelerinde interface yapısının tam mantığını öğrendim ve projemde köklü bir değişiklik yaparak interface kullanmak istedim.

    Şimdi sorum şu şekilde; Benim makale düzenlemek için ilgili 2 metodum var. Kişi makaleyi düzenlerken kimin yazdığı ve hangi kategoride olduğunu değiştirebiliyor. Bunun için bu bilgileri View tarafına aşağıdaki gibi ViewData ile gönderiyordum.

    public async Task<IActionResult> Edit(int? id)
        {
            var article = await _context.Article.FindAsync(id);
    
            ViewData["CategoryId"] = new SelectList(_context.Categories, "CategoriesId", "CategoryName", article.CategoryId);
    
            ViewData["CreatedUserId"] = new SelectList(_context.Author, "AuthorId", "UserName", article.CreatedUserId);
    
            return View(article);
        }
    

    Interface yapısını kullanmaya başladığımda artık bu metod şöyle görünüyor.

      public IActionResult Edit(int? id)
        {
    
            return View(_interface.EditGet(id));
        }
    

    EditGet metodu

    public Article EditGet(int? id)
        {
            var article = _articleContext.Article.Find(id);
            return article;
        }
    

    Şimdi arkadaşlar basit bir şekilde makalenin düzenlendiği view sayfasını ben böyle hatasız görüntülüyorum ama açılır kutucuklar boş geliyor. Burada viewdata kullanamıyorsak nasıl olacak nasıl bir algoritma kurabiliriz? Yardımcı olursanız sevinirim.

    c# asp.net-core-mvc 2 ay önce 139 Görüntüleme

( 1 ) Cevap

  1. askinglr34
    0
    2879
    17.04.2020 21:03:00

    Yapmak istediğini anlamadım ama, önce biraz interface değineyim, sonra interface in doğru kullanımı ve asıl amacını anlatan bir örnek uygulama yazayım. Sen bu örnek üzerinden kendi projeni düzenle.

    Şimdi şöyle söyleyeyim,bir Interface'i yapılacak bir işin sözleşmesi, şartnamesi gibi düşünürüm ben hep.

    Interface deki metotlar içi boş metotlardır, amaç bu interfacei implement eden bir sınıfın, interface içindeki tüm metotların içleri dolu halinin yazılmasına zorlamasıdır.

    Örneğin HomeController ın implement ettiği Controller aşağıdaki interfaceleri implement eder, f12 ile bu interfaceleri incelersen, daha iyi anlayabilirsin.

    Controller : ControllerBase, IActionFilter, IAuthenticationFilter, IAuthorizationFilter, IDisposable, IExceptionFilter, IResultFilter, IAsyncController, IController, IAsyncManagerContainer
    

    Şimdi biz kendimiz bir örnek yapalım, ISite interfaceini implement eden tüm Controllerın sitenin adını yazmaya zorlayalım ;

    using System.Web.Mvc;
    
    namespace WebApplication1.Controllers
    {
        public interface ISite
        {
            ActionResult SiteAdiYaz();
        }
    
        public class HomeController : Controller, ISite
        {
            public ActionResult Index()
            {
                return View();
            }
    
            // HomeController ISite interfaceini implement ettiği için
           //bu metodu yazmak ve içini doldurmak zorunda kaldık.
            public ActionResult SiteAdiYaz()
            {
                ViewData["siteAdi"] = "code.replyfeed";
                return View();
            }
        }
    }
    

    SiteAdiYaz metodunun return View(); kısmına sağ tıklayıp, Add View diyip, bir tane view ekleyip, içini dolduruyoruz, ben viewdata ile veri aktardım bu örnekte

     @{
        ViewBag.Title = "SiteAdiYaz";
    }
    
    <h2>SiteAdiYaz</h2>
    
    @ViewData["siteAdi"];
    
    • Insyder Cevabınız için teşekkür ediyorum. Benim interface'i impelement ettiğim bir sınıfım var ve tüm işlerimi oradan hallediyorum. Ancak bu view datayı o classdan controllere nasıl taşıyabilirim onu bilmiyorum.

    • Yorum Ekleyin

Cevabınız