1. Haberler
  2. Programlama
  3. Real Estate – AspNet Core 8.0 – Bölüm 10

Real Estate – AspNet Core 8.0 – Bölüm 10

Murat Yücedağ'ın AspNet Core 8.0 ile Api Dapper gibi teknolojileri kullandığı Real Estate serisinin 10. bölümünü izledim. Bu bölümde yapılanları size anlatmaya çalıştım. AspNet Core ile geliştirilen bu projede her ders için blog yazısı yazmaya çalışacağım. Sizler de bu blog serisini takip ederek dahada pekiştirmiş olursunuz.

Real Estate Projesi ASPNET CORE 8.0 bölüm 10 - murat yücedağ - eyüp furkan tüylü
Real Estate Projesi ASPNET CORE 8.0 bölüm 10 - murat yücedağ - eyüp furkan tüylü
Paylaş

Bu Yazıyı Paylaş

veya linki kopyala

Real Estate AspNet Core 8.0 projesinin bu bölümünde UI kısmını ele alıyor olacağız. AspNet Core 8.0 ile geliştirdiğimiz bu projede api tarafına ufak bir ara veriyoruz ve Anasayfa’yı oluşturmaya başlıyoruz.

Bir önceki dersin anlatımını henüz görmediysenizi aşağıdaki bağlantıya tıklayarak bölüm 9’u okuyabilirsiniz.

Bir Önceki Bölüm
thumbnail
Real Estate – AspNet Core 8.0 – Bölüm 9
Haberi görüntüle

AspNet Core 8.0 ile Anasayfa Vitrin İşlemleri

Anlatıma geçmeden önce Murat Yücedağ’ın videosuna ulaşmak için buraya tıklayın.

İlk olarak vitrin ile çalışacağımızdan bahsettik. Bunun için hemen UI projesinde Controller’da DefaultController tanımlamak ile işe başlayabiliriz. DefaultController’ı anasayfa olarak düşünebilirsiniz. İlk olarak template’i parçalara ayırarak layoutumuzu hazırlayalım. Bunun için wwwroot altında starter altında index.html dosyasını düzenleyebiliriz.

Layout oluşturmak

AspNet Core 8.0 ile geliştirdiğimiz bu projede iki adet katmanımız vardı. Biri API katmanı diğeri ise UI katmanı. Bu derste işimiz UI katmanı ile olacak. UI katmanında Views klasörünün altında yer alan Shared klasöründe layoutlarımız tutulur. Biz de buraya layoutumuzu tanımlayacağız. Bunun için Shared klasörünün üzerine sağ tıklayıp “Add New” -> “New File” -> “ASP.NET Core” altında “Razer Layout” u seçiyoruz. Ardından bizden bir isim bekliyor. “_DefaultLayout” olarak adlandırıyoruz.

aspnet core 8.0 real estate projesi layout olusturmak
Real Estate – AspNet Core 8.0 – Bölüm 10 9

Bunu oluşturduktan sonra Anasayfa için bir adet View oluşturmamız gerekiyor.

DefaultController Oluşturmak

AspNet ile geliştirdiğimiz projede Controllers klasörüne sağ tıklayarak Add sekmesi altında New File’ı seçiyoruz. Ardından AspNet Core sekmesine gelip Controller Class’ı seçiyoruz ve Name kısmında DefaultController adını verip Create butonuna basıyoruz.

aspnet core 8.0 real estate projesi defaultcontroller olusturmak
Real Estate – AspNet Core 8.0 – Bölüm 10 10

Artık controller’ımız da oluştu. Şimdi ise DefaultController’da Index sayfası için bir View oluşturmamız gerekiyor.

Index View Oluşturmak

MacOS tarafında geliştirme yaptığım için ben manuel olarak View altında Default adlı bir klasör oluşturmam ve içerisinde yeni bir View dosyası oluşturmam gerekiyor. Bunun için hemen Views klasörüne bir adet klasör ekliyorum ve içerisine de RazerView ile Index dosyasını oluşturuyorum.

aspnet core 8.0 real estate projesi razerview ile index olusturmak
Real Estate – AspNet Core 8.0 – Bölüm 10 11

Şimdi burada açılacak sayfada bizde layout yok. Bunu manuel tanımlamamız gerekiyor. Bunun için aşağıdaki kodları kopyalayabilirsiniz.

@{
    ViewData["Title"] = "Index";
    Layout = "~/Views/Shared/_DefaultLayout.cshtml";
}

<h1>Index</h1>

Sıra geldi Layout’u temaya uygun düzenlemekte.

Layout’u temaya uygun düzenlemek

Temanın contact sayfası kısa ve daha kolay olduğu için Contact.html sayfasını açıp ilgili kısımları çekebiliriz.

İki adet görsel bırakıyorum. Bunlar temamızda üst kısım ve alt kısım olarak düşünebilirsiniz. Orta alana ise RenderBody kodunu yazıyor olacağız. Bunu biraz ileride anlatıyor olacağım.

Görsellerde gördüğünüz kırmızı kutu ile çerçevelenmiş alanların kodlarına ihtiyacımız var. Bu alanlar her sayfada ortak. Bu sebeple buraları Layout haline getirirsek sorunumuz çözülecektir.

Tema Üst Kısım Kodları


<!--
Author: W3layouts
Author URL: http://w3layouts.com
-->
<!doctype html>
<html lang="en">
<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <title>Estate sale - Real Estate Category Bootstrap Responsive Website Template - Contact : W3layouts</title>

    <!-- google fonts -->
    <link href="//fonts.googleapis.com/css2?family=Kumbh+Sans:wght@300;400;700&display=swap" rel="stylesheet">

    <!-- Template CSS -->
    <link rel="stylesheet" href="assets/css/style-starter.css">
</head>
<body>

    <!--header-->
    <header id="site-header" class="fixed-top">
        <div class="container">
            <nav class="navbar navbar-expand-lg stroke px-0">
                <h1>
                    <a class="navbar-brand" href="index.html">
                        <span class="fa fa-home"></span> Estate sale
                    </a>
                </h1>
                <!-- if logo is image enable this
                <a class="navbar-brand" href="#index.html">
                    <img src="image-path" alt="Your logo" title="Your logo" style="height:35px;" />
                </a> -->
                <button class="navbar-toggler  collapsed bg-gradient" type="button" data-toggle="collapse"
                        data-target="#navbarTogglerDemo02" aria-controls="navbarTogglerDemo02" aria-expanded="false"
                        aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon fa icon-expand fa-bars"></span>
                    <span class="navbar-toggler-icon fa icon-close fa-times"></span>
                </button>

                <div class="collapse navbar-collapse" id="navbarTogglerDemo02">
                    <ul class="navbar-nav ml-lg-5 mr-auto">
                        <li class="nav-item @@home__active">
                            <a class="nav-link" href="index.html">Home <span class="sr-only">(current)</span></a>
                        </li>
                        <li class="nav-item @@listing__active">
                            <a class="nav-link" href="listing.html">Listing</a>
                        </li>
                        <li class="nav-item dropdown @@property__active">
                            <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button"
                               data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                Property <span class="fa fa-angle-down"></span>
                            </a>
                            <div class="dropdown-menu" aria-labelledby="navbarDropdown">
                                <a class="dropdown-item @@ps__active" href="property-single.html">Single property</a>
                            </div>
                        </li>
                        <li class="nav-item dropdown active">
                            <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button"
                               data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                Pages <span class="fa fa-angle-down"></span>
                            </a>
                            <div class="dropdown-menu" aria-labelledby="navbarDropdown">
                                <a class="dropdown-item @@about__active" href="about.html">About us</a>
                                <a class="dropdown-item active" href="contact.html">Contact us</a>
                            </div>
                        </li>
                    </ul>
                    <div class="top-quote mt-lg-0">
                        <a href="#buytheme" class="btn btn-style btn-primary">
                            <span class="fa fa-home"></span> Add
                            listiing
                        </a>
                    </div>
                    <!--/search-right-->
                    <div class="search mx-3">
                        <input class="search_box" type="checkbox" id="search_box">
                        <label class="fa fa-search" for="search_box"></label>
                        <div class="search_form">
                            <form action="error.html" method="GET">
                                <input type="text" placeholder="Search"><input type="submit" value="search">
                            </form>
                        </div>
                    </div>
                    <!--//search-right-->
                </div>

                <!-- toggle switch for light and dark theme -->
                <div class="mobile-position">
                    <nav class="navigation">
                        <div class="theme-switch-wrapper">
                            <label class="theme-switch" for="checkbox">
                                <input type="checkbox" id="checkbox">
                                <div class="mode-container">
                                    <i class="gg-sun"></i>
                                    <i class="gg-moon"></i>
                                </div>
                            </label>
                        </div>
                    </nav>
                </div>
                <!-- //toggle switch for light and dark theme -->
            </nav>
        </div>
    </header>
    <!--/header-->

Bu kodu kullanacağız.

Tema Alt Kısım Kodları

Temanın footer kısmı ise şu şekilde.

 <!-- footers 20 -->
    <section class="w3l-footers-20">
        <div class="footers20">
            <div class="container">
                <div class="footers20-content">
                    <div class="d-grid grid-col-4 grids-content">
                        <div class="column">
                            <a href="#url" class="link"><span class="fa fa-comments"></span></a>
                            <a href="#url" class="title-small">Free consultation</a>
                            <h4>Schedule a free consultation with our specialist.</h4>
                            <a href="#buytheme" class="btn btn-style btn-primary">
                                Schedule now
                                <span class="fa fa-long-arrow-right ml-2"></span>
                            </a>
                        </div>
                        <div class="column">
                            <a href="#url" class="link"><span class="fa fa-phone"></span></a>
                            <a href="#url" class="title-small">help desk</a>
                            <h4>Do you have questions or want more infomation? Call Now</h4>
                            <a href="tel:+1-2345-678-11">
                                <p class="contact-phone mt-2">
                                    <span class="lnr lnr-phone-handset"></span> +1-2345-678-11
                                </p>
                            </a>
                        </div>
                        <div class="column mt-lg-0 mt-md-5">
                            <h4 class="mb-1">Signup for newsletter</h4>
                            <p>and get latest news and updates</p>
                            <form action="#" class="subscribe-form mt-4" method="post">
                                <div class="form-group">
                                    <input type="email" name="subscribe" placeholder="Enter your email" required="">
                                    <button class="btn btn-style btn-primary">Subscribe</button>
                                </div>
                            </form>
                            <ul class="footers-17_social">
                                <h4 class="d-inline mr-4">Follow us</h4>
                                <li><a href="#url" class="twitter"><span class="fa fa-twitter"></span></a></li>
                                <li><a href="#url" class="facebook"><span class="fa fa-facebook"></span></a></li>
                                <li><a href="#url" class="linkedin"><span class="fa fa-linkedin"></span></a></li>
                                <li><a href="#url" class="instagram"><span class="fa fa-instagram"></span></a></li>
                            </ul>
                        </div>
                    </div>
                    <div class="d-grid grid-col-3 grids-content1 bottom-border">
                        <div class="columns copyright-grid align-self">
                            <p class="copy-footer-29">
                                © 2020 Estate sale. All rights reserved | Designed by <a href="https://w3layouts.com">W3layouts</a>
                            </p>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <!-- move top -->
        <button onclick="topFunction()" id="movetop" title="Go to top">
            &#10548;
        </button>
        <script>// When the user scrolls down 20px from the top of the document, show the button
    window.onscroll = function () {
      scrollFunction()
    };

    function scrollFunction() {
      if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) {
        document.getElementById("movetop").style.display = "block";
      } else {
        document.getElementById("movetop").style.display = "none";
      }
    }

    // When the user clicks on the button, scroll to the top of the document
    function topFunction() {
      document.body.scrollTop = 0;
      document.documentElement.scrollTop = 0;
    }</script>
        <!-- /move top -->
    </section>

    <!-- jQuery and Bootstrap JS -->
    <script src="assets/js/jquery-3.3.1.min.js"></script>

    <script src="assets/js/theme-change.js"></script><!-- theme switch js (light and dark)-->
    <!-- stats number counter-->
    <script src="assets/js/jquery.waypoints.min.js"></script>
    <script src="assets/js/jquery.countup.js"></script>
    <script>$('.counter').countUp();</script>
    <!-- //stats number counter -->
    <!-- owlcarousel -->
    <script src="assets/js/owl.carousel.js"></script>
    <!-- script for blog post slider -->
    <script>$(document).ready(function () {
    $('.owl-blog').owlCarousel({
      loop: true,
      margin: 30,
      nav: false,
      responsiveClass: true,
      autoplay: false,
      autoplayTimeout: 5000,
      autoplaySpeed: 1000,
      autoplayHoverPause: false,
      responsive: {
        0: {
          items: 1,
          nav: true
        },
        480: {
          items: 1,
          nav: true
        },
        700: {
          items: 1,
          nav: true
        },
        1090: {
          items: 1,
          nav: true
        }
      }
    })
  })</script>
    <!-- //script for blog post slider -->
    <!-- script for tesimonials carousel slider -->
    <script>$(document).ready(function () {
    $("#owl-demo1").owlCarousel({
      loop: true,
      nav: false,
      margin: 50,
      responsiveClass: true,
      responsive: {
        0: {
          items: 1,
          nav: false
        },
        736: {
          items: 1,
          nav: false
        }
      }
    })
  })</script>
    <!-- //script for tesimonials carousel slider -->

    <script src="assets/js/jquery.magnific-popup.min.js"></script>
    <script>$(document).ready(function () {
    $('.popup-with-zoom-anim').magnificPopup({
      type: 'inline',

      fixedContentPos: false,
      fixedBgPos: true,

      overflowY: 'auto',

      closeBtnInside: true,
      preloader: false,

      midClick: true,
      removalDelay: 300,
      mainClass: 'my-mfp-zoom-in'
    });

    $('.popup-with-move-anim').magnificPopup({
      type: 'inline',

      fixedContentPos: false,
      fixedBgPos: true,

      overflowY: 'auto',

      closeBtnInside: true,
      preloader: false,

      midClick: true,
      removalDelay: 300,
      mainClass: 'my-mfp-slide-bottom'
    });
  });</script>

    <!-- disable body scroll which navbar is in active -->
    <script>$(function () {
    $('.navbar-toggler').click(function () {
      $('body').toggleClass('noscroll');
    })
  });</script>
    <!-- disable body scroll which navbar is in active -->
    <!-- MENU-JS -->
    <script>$(window).on("scroll", function () {
    var scroll = $(window).scrollTop();

    if (scroll >= 80) {
      $("#site-header").addClass("nav-fixed");
    } else {
      $("#site-header").removeClass("nav-fixed");
    }
  });

  //Main navigation Active Class Add Remove
  $(".navbar-toggler").on("click", function () {
    $("header").toggleClass("active");
  });
  $(document).on("ready", function () {
    if ($(window).width() > 991) {
      $("header").removeClass("active");
    }
    $(window).on("resize", function () {
      if ($(window).width() > 991) {
        $("header").removeClass("active");
      }
    });
  });</script>
    <!-- //MENU-JS -->
    <!-- bootstrap -->
    <script src="assets/js/bootstrap.min.js"></script>

</body>

</html>

Şimdi bu iki kodu DefaultLayout’a taşıyacağız ve src yollarını düzelteceğiz. Src yollarını düzeltmek için temanın dosyalarının olduğu klasörü işaret etmeliyiz. Bunun için “~/starter/” yolunu eklememiz gerekiyor. Aşağıda DefaultLayout dosyasının tam kodlarını bulabileceksiniz.

DefaultLayout Kodları

@{
    Layout = null;
}

<!--
Author: W3layouts
Author URL: http://w3layouts.com
-->
<!doctype html>
<html lang="en">
<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <title>Estate sale - Real Estate Category Bootstrap Responsive Website Template - Contact : W3layouts</title>

    <!-- google fonts -->
    <link href="//fonts.googleapis.com/css2?family=Kumbh+Sans:wght@300;400;700&display=swap" rel="stylesheet">

    <!-- Template CSS -->
    <link rel="stylesheet" href="~/starter/assets/css/style-starter.css">
</head>
<body>

    <!--header-->
    <header id="site-header" class="fixed-top">
        <div class="container">
            <nav class="navbar navbar-expand-lg stroke px-0">
                <h1>
                    <a class="navbar-brand" href="index.html">
                        <span class="fa fa-home"></span> Estate sale
                    </a>
                </h1>

                <button class="navbar-toggler  collapsed bg-gradient" type="button" data-toggle="collapse"
                        data-target="#navbarTogglerDemo02" aria-controls="navbarTogglerDemo02" aria-expanded="false"
                        aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon fa icon-expand fa-bars"></span>
                    <span class="navbar-toggler-icon fa icon-close fa-times"></span>
                </button>

                <div class="collapse navbar-collapse" id="navbarTogglerDemo02">
                    <ul class="navbar-nav ml-lg-5 mr-auto">
                        <li class="nav-item @@home__active">
                            <a class="nav-link" href="index.html">Home <span class="sr-only">(current)</span></a>
                        </li>
                        <li class="nav-item @@listing__active">
                            <a class="nav-link" href="listing.html">Listing</a>
                        </li>
                        <li class="nav-item dropdown @@property__active">
                            <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button"
                               data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                Property <span class="fa fa-angle-down"></span>
                            </a>
                            <div class="dropdown-menu" aria-labelledby="navbarDropdown">
                                <a class="dropdown-item @@ps__active" href="property-single.html">Single property</a>
                            </div>
                        </li>
                        <li class="nav-item dropdown active">
                            <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button"
                               data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                Pages <span class="fa fa-angle-down"></span>
                            </a>
                            <div class="dropdown-menu" aria-labelledby="navbarDropdown">
                                <a class="dropdown-item @@about__active" href="about.html">About us</a>
                                <a class="dropdown-item active" href="contact.html">Contact us</a>
                            </div>
                        </li>
                    </ul>
                    <div class="top-quote mt-lg-0">
                        <a href="#buytheme" class="btn btn-style btn-primary">
                            <span class="fa fa-home"></span> Add
                            listiing
                        </a>
                    </div>
                    <!--/search-right-->
                    <div class="search mx-3">
                        <input class="search_box" type="checkbox" id="search_box">
                        <label class="fa fa-search" for="search_box"></label>
                        <div class="search_form">
                            <form action="error.html" method="GET">
                                <input type="text" placeholder="Search"><input type="submit" value="search">
                            </form>
                        </div>
                    </div>
                    <!--//search-right-->
                </div>

                <!-- toggle switch for light and dark theme -->
                <div class="mobile-position">
                    <nav class="navigation">
                        <div class="theme-switch-wrapper">
                            <label class="theme-switch" for="checkbox">
                                <input type="checkbox" id="checkbox">
                                <div class="mode-container">
                                    <i class="gg-sun"></i>
                                    <i class="gg-moon"></i>
                                </div>
                            </label>
                        </div>
                    </nav>
                </div>
                <!-- //toggle switch for light and dark theme -->
            </nav>
        </div>
    </header>
    <!--/header-->

    <section class="w3l-about-breadcrumb">
        <div class="breadcrumb-bg breadcrumb-bg-about pt-5">
            <div class="container pt-lg-5 py-3">
            </div>
        </div>
    </section>





    <!-- contacts -->

    @RenderBody()

    <!-- //contacts -->
    <!-- footers 20 -->
    <section class="w3l-footers-20">
        <div class="footers20">
            <div class="container">
                <div class="footers20-content">
                    <div class="d-grid grid-col-4 grids-content">
                        <div class="column">
                            <a href="#url" class="link"><span class="fa fa-comments"></span></a>
                            <a href="#url" class="title-small">Free consultation</a>
                            <h4>Schedule a free consultation with our specialist.</h4>
                            <a href="#buytheme" class="btn btn-style btn-primary">
                                Schedule now
                                <span class="fa fa-long-arrow-right ml-2"></span>
                            </a>
                        </div>
                        <div class="column">
                            <a href="#url" class="link"><span class="fa fa-phone"></span></a>
                            <a href="#url" class="title-small">help desk</a>
                            <h4>Do you have questions or want more infomation? Call Now</h4>
                            <a href="tel:+1-2345-678-11">
                                <p class="contact-phone mt-2">
                                    <span class="lnr lnr-phone-handset"></span> +1-2345-678-11
                                </p>
                            </a>
                        </div>
                        <div class="column mt-lg-0 mt-md-5">
                            <h4 class="mb-1">Signup for newsletter</h4>
                            <p>and get latest news and updates</p>
                            <form action="#" class="subscribe-form mt-4" method="post">
                                <div class="form-group">
                                    <input type="email" name="subscribe" placeholder="Enter your email" required="">
                                    <button class="btn btn-style btn-primary">Subscribe</button>
                                </div>
                            </form>
                            <ul class="footers-17_social">
                                <h4 class="d-inline mr-4">Follow us</h4>
                                <li><a href="#url" class="twitter"><span class="fa fa-twitter"></span></a></li>
                                <li><a href="#url" class="facebook"><span class="fa fa-facebook"></span></a></li>
                                <li><a href="#url" class="linkedin"><span class="fa fa-linkedin"></span></a></li>
                                <li><a href="#url" class="instagram"><span class="fa fa-instagram"></span></a></li>
                            </ul>
                        </div>
                    </div>
                    <div class="d-grid grid-col-3 grids-content1 bottom-border">
                        <div class="columns copyright-grid align-self">
                            <p class="copy-footer-29">
                                © 2020 Estate sale. All rights reserved | Designed by <a href="https://w3layouts.com">W3layouts</a>
                            </p>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <!-- move top -->
        <button onclick="topFunction()" id="movetop" title="Go to top">
            &#10548;
        </button>
        <script>// When the user scrolls down 20px from the top of the document, show the button
            window.onscroll = function () {
                scrollFunction()
            };

            function scrollFunction() {
                if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) {
                    document.getElementById("movetop").style.display = "block";
                } else {
                    document.getElementById("movetop").style.display = "none";
                }
            }

            // When the user clicks on the button, scroll to the top of the document
            function topFunction() {
                document.body.scrollTop = 0;
                document.documentElement.scrollTop = 0;
            }</script>
        <!-- /move top -->
    </section>

    <!-- jQuery and Bootstrap JS -->
    <script src="~/starter/assets/js/jquery-3.3.1.min.js"></script>

    <script src="~/starter/assets/js/theme-change.js"></script><!-- theme switch js (light and dark)-->
    <!-- stats number counter-->
    <script src="~/starter/assets/js/jquery.waypoints.min.js"></script>
    <script src="~/starter/assets/js/jquery.countup.js"></script>
    <script>$('.counter').countUp();</script>
    <!-- //stats number counter -->
    <!-- owlcarousel -->
    <script src="~/starter/assets/js/owl.carousel.js"></script>
    <!-- script for blog post slider -->
    <script>$(document).ready(function () {
            $('.owl-blog').owlCarousel({
                loop: true,
                margin: 30,
                nav: false,
                responsiveClass: true,
                autoplay: false,
                autoplayTimeout: 5000,
                autoplaySpeed: 1000,
                autoplayHoverPause: false,
                responsive: {
                    0: {
                        items: 1,
                        nav: true
                    },
                    480: {
                        items: 1,
                        nav: true
                    },
                    700: {
                        items: 1,
                        nav: true
                    },
                    1090: {
                        items: 1,
                        nav: true
                    }
                }
            })
        })</script>
    <!-- //script for blog post slider -->
    <!-- script for tesimonials carousel slider -->
    <script>$(document).ready(function () {
            $("#owl-demo1").owlCarousel({
                loop: true,
                nav: false,
                margin: 50,
                responsiveClass: true,
                responsive: {
                    0: {
                        items: 1,
                        nav: false
                    },
                    736: {
                        items: 1,
                        nav: false
                    }
                }
            })
        })</script>
    <!-- //script for tesimonials carousel slider -->

    <script src="~/starter/assets/js/jquery.magnific-popup.min.js"></script>
    <script>$(document).ready(function () {
            $('.popup-with-zoom-anim').magnificPopup({
                type: 'inline',

                fixedContentPos: false,
                fixedBgPos: true,

                overflowY: 'auto',

                closeBtnInside: true,
                preloader: false,

                midClick: true,
                removalDelay: 300,
                mainClass: 'my-mfp-zoom-in'
            });

            $('.popup-with-move-anim').magnificPopup({
                type: 'inline',

                fixedContentPos: false,
                fixedBgPos: true,

                overflowY: 'auto',

                closeBtnInside: true,
                preloader: false,

                midClick: true,
                removalDelay: 300,
                mainClass: 'my-mfp-slide-bottom'
            });
        });</script>

    <!-- disable body scroll which navbar is in active -->
    <script>$(function () {
            $('.navbar-toggler').click(function () {
                $('body').toggleClass('noscroll');
            })
        });</script>
    <!-- disable body scroll which navbar is in active -->
    <!-- MENU-JS -->
    <script>$(window).on("scroll", function () {
            var scroll = $(window).scrollTop();

            if (scroll >= 80) {
                $("#site-header").addClass("nav-fixed");
            } else {
                $("#site-header").removeClass("nav-fixed");
            }
        });

        //Main navigation Active Class Add Remove
        $(".navbar-toggler").on("click", function () {
            $("header").toggleClass("active");
        });
        $(document).on("ready", function () {
            if ($(window).width() > 991) {
                $("header").removeClass("active");
            }
            $(window).on("resize", function () {
                if ($(window).width() > 991) {
                    $("header").removeClass("active");
                }
            });
        });</script>
    <!-- //MENU-JS -->
    <!-- bootstrap -->
    <script src="~/starter/assets/js/bootstrap.min.js"></script>

</body>

</html>

Evet DefaultLayout dosyamız hazır. Burada değişecek alanı RenderBody ile işaretliyoruz. Bizde bu alan alt ve üst kısmın ortası olduğu için ilgili kısımların ortasında RenderBody() fonksiyonunu çağırdık.

Components ile çalışmak

Layout dosyasındaki karmaşıklıktan kurtulmak için Componentler ile çalışmak daha doğru olacaktır. Şimdi UI Projesinin altında bir tane ViewComponents adında klasör oluşturalım. Ardından klasörün içerisinde Layout adında bir klasör daha tanımlayalım. Bunu yapmamızdaki amaç Layout’un componentlerini burada tutacağımızı belirtmek. Düzenli bir kod yazmak. Temiz bir mimari oluşturmaya çalışmak. Şimdi Layout klasörüne sağ tıklayıp add sekmesinden New Class’ı seçip _HeaderViewComponentPartial ismini verdik.

aspnet core 8.0 real estate projesi header view component partial olusturmak
Real Estate – AspNet Core 8.0 – Bölüm 10 14

Ardından dosya oluştuğunda ViewComponent sınıfından kalıtım almasını sağladık. Ancak dikkat edin ViewComponents değil. Sonunda s takısı yok. ViewComponent sınıfını üzerine gelip “using Microsoft.AspNetCore.Mvc;” butonuna basarak import ediyoruz.

AspNet Core’da ViewComponent’ler partialView’lar gibi görev görürler. Ancak PartialView’lara URL üzerinden erişim sağlanabilirken ViewComponent’lere URL üzerinden erişim sağlayamazsınız.

Şimdi _HeaderViewComponentPartial içerisinde bir metod oluşturacağız. Bu metod IViewComponentResult sınıfından türeyecek ve bize bir View dönecek.

using System;
using Microsoft.AspNetCore.Mvc;

namespace RealEstate_Dapper_UI.ViewComponents.Layout
{
	public class _HeaderViewComponentPartial:ViewComponent
	{
		public IViewComponentResult Invoke()
		{
			return View();
		}
	}
}

AspNet’te Componentlerimizi View klasörü altında Shared altında Components klasöründe tutacağız. Bunun da altında _HeaderViewComponentPartial adlı bir klasör oluşturacağız. Burada isimlerin aynı olmasına dikkat etmeliyiz.

Shared altındaki Components altındaki _HeaderViewComponentPartial klasöründe yeni bir dosya oluşturuyoruz. Bu dosya Razor View’dan oluşacak ve adı Default olacak. Ardından bu dosyanın içine layoutta taşımak istediğimiz alanı alıyoruz. Şimdilik head etiketleri arasını buraya taşıyoruz.

<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <title>Hayalinizdeki eve bir adım uzaktasınız</title>

    <!-- google fonts -->
    <link href="//fonts.googleapis.com/css2?family=Kumbh+Sans:wght@300;400;700&display=swap" rel="stylesheet">

    <!-- Template CSS -->
    <link rel="stylesheet" href="~/starter/assets/css/style-starter.css">
</head>

Yukarıdaki kod Default dosyasına aittir. Layout içerisinden bu kısmı çıkardık. Şimdi bunu Layout dosyasında çağırmamız gerekiyor. Tekrar _DefaultLayout dosyasını açıyoruz ve kodları kestiğimiz yere;

    @await Component.InvokeAsync("_HeaderViewComponentPartial")

kodunu ekliyoruz. Bu sayede componen’timizi buraya çağırmış oluyoruz.

Şimdi aynı işlemleri navbar için de yapacağız.

Navbar Component

AspNet ile geliştirdiğimiz bu projede ilk olarak hemen ViewComponents altında Layout altında “_NavbarViewComponentPartial.cs” dosyasını sınıf olarak oluşturuyoruz. Ardından sınıfın ViewComponent’ten kalıtım almasını sağlıyoruz. IViewComponentResult tipinde Invoke adında View dönen metodumuzu tanımlıyoruz.

using System;
using Microsoft.AspNetCore.Mvc;

namespace RealEstate_Dapper_UI.ViewComponents.Layout
{
	public class _NavbarViewComponentPartial:ViewComponent
	{
		public IViewComponentResult Invoke()
		{
			return View();
		}
	}
}

Ardından Views altında Shared altında Components altında “_NavbarViewComponentPartial” adında bir klasör oluşturuyoruz. İçerisine ise Default adında Razor View ekliyoruz. Default.cshtml dosyasının içerisini temizleyip navbar kodlarını buraya ekliyoruz.

<header id="site-header" class="fixed-top">
    <div class="container">
        <nav class="navbar navbar-expand-lg stroke px-0">
            <h1>
                <a class="navbar-brand" href="index.html">
                    <span class="fa fa-home"></span> Real Estate
                </a>
            </h1>

            <button class="navbar-toggler  collapsed bg-gradient" type="button" data-toggle="collapse"
                    data-target="#navbarTogglerDemo02" aria-controls="navbarTogglerDemo02" aria-expanded="false"
                    aria-label="Toggle navigation">
                <span class="navbar-toggler-icon fa icon-expand fa-bars"></span>
                <span class="navbar-toggler-icon fa icon-close fa-times"></span>
            </button>

            <div class="collapse navbar-collapse" id="navbarTogglerDemo02">
                <ul class="navbar-nav ml-lg-5 mr-auto">
                    <li class="nav-item @@home__active">
                        <a class="nav-link" href="index.html">Anasayfa <span class="sr-only">(current)</span></a>
                    </li>
                    <li class="nav-item @@listing__active">
                        <a class="nav-link" href="listing.html">İlanlar</a>
                    </li>
                    <li class="nav-item dropdown @@property__active">
                        <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button"
                           data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                            Fırsatlar <span class="fa fa-angle-down"></span>
                        </a>
                        <div class="dropdown-menu" aria-labelledby="navbarDropdown">
                            <a class="dropdown-item @@ps__active" href="property-single.html">Günün Fırsatı</a>
                        </div>
                    </li>
                    <li class="nav-item @@listing__active">
                        <a class="nav-link" href="listing.html">Hakkımızda</a>
                    </li>
                    <li class="nav-item @@listing__active">
                        <a class="nav-link" href="listing.html">Bize Yazın</a>
                    </li>
                    <li class="nav-item @@listing__active">
                        <a class="nav-link" href="listing.html">Giriş Yapın</a>
                    </li>
                </ul>
                <div class="top-quote mt-lg-0">
                    <a href="#buytheme" class="btn btn-style btn-primary">
                        <span class="fa fa-home"></span> İlan Ver
                    </a>
                </div>
                <!--/search-right-->
                <div class="search mx-3">
                    <input class="search_box" type="checkbox" id="search_box">
                    <label class="fa fa-search" for="search_box"></label>
                    <div class="search_form">
                        <form action="error.html" method="GET">
                            <input type="text" placeholder="Search"><input type="submit" value="search">
                        </form>
                    </div>
                </div>
                <!--//search-right-->
            </div>

            <!-- toggle switch for light and dark theme -->
            <div class="mobile-position">
                <nav class="navigation">
                    <div class="theme-switch-wrapper">
                        <label class="theme-switch" for="checkbox">
                            <input type="checkbox" id="checkbox">
                            <div class="mode-container">
                                <i class="gg-sun"></i>
                                <i class="gg-moon"></i>
                            </div>
                        </label>
                    </div>
                </nav>
            </div>
            <!-- //toggle switch for light and dark theme -->
        </nav>
    </div>
</header>

Header kodlarını kestiğimiz _DefaultLayout isimli layout dosyasında ise kestiğimiz yere;

    @await Component.InvokeAsync("_NavbarViewComponentPartial") 

kodunu ekliyoruz.

image 1
Real Estate – AspNet Core 8.0 – Bölüm 10 15

Evet, bu kısımla birlikte videoyu tamamlamış olduk. AspNet Core 8.0 ile geliştirdiğimiz bu projeyi aktif olarak takip etmenizde fayda var. Murat Hocanın AspNet Core 8.0 dersi gerçekten sizlere faydalı olacaktır. Referans olarak kullanabileceğiniz projelerden. AspNet Core iş ilanlarında çok rahatlıkla bu projeyi gösterebilirsiniz. Gerçekten detaylı bir proje olacak gibi duruyor. AspNet Core 8.0 serisinin bir sonraki yazısında görüşmek üzere. İyi çalışmalar.

0
mutlu
Mutlu
0
_zg_n
Üzgün
0
sinirli
Sinirli
0
_a_rm_
Şaşırmış
0
k_t_
Kötü
1
beynim_yand_
Beynim Yandı
0
_eytani
Şeytani
Real Estate – AspNet Core 8.0 – Bölüm 10
Yorum Yap

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Giriş Yap

Eyüp Furkan Tüylü ayrıcalıklarından yararlanmak için hemen giriş yapın veya hesap oluşturun, üstelik tamamen ücretsiz!