اضافة Meta Tags و Title الى ASP.NET core في Controller

تطوير الويب Backend - ASP.NET Core

السؤال : كيف يمكن اضافة Meta Tags و Title الى ASP.NET core في Controller بحيث تكون متغيره حسب محتوى الصفحه. يعني ما نثبتها في View 

الفكره هون : هو تغيير عنوان الصفحه Title بشكل برمجي بحيث يتغير حسب محتوى الصفحه. 

تمام. 

حتى نعمل التغيير بنحتاج الى اضافة النص المطلوب عرضه في Meta Tags و Title داخل action في Controller وبعدها بنخزن هذه القيم في ViewBag. 

وبعد هيك بنعرض ViewBag في View. 


نطبق مثال حتى نفهم الموضوع: 

لنفرض انو عندنا  action  داخل Controller باسم Index 

الكود: 

 public class DetailsController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
    }

لتشغيل هذا action اكيد لازم يكون عندنا View بنفس الاسم :

الكود: 

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>

</head>
<body>
</body>
</html>

لاستدعاء هذا View بكون الرابط: 

https://localhost:44382/details

لو حاولنا نشوف شو هي Meta tags و Title بالصفحه بعد التشغيل بتكون : 

(حتى تشوف التفاصيل انقر يمين فوق الصفحه وبعدها اختر View Page Source 

النتيجة:

meta tag و title الظاهرين في الشاشة هم القيم الافتراضية.

ممكن نغير هاذه القيم مباشرة من View وبتكون ثابته على طول. 

حتى نغير هذه القيم برمجيا نغير الكود في action الى 

 public class DetailsController : Controller
    {
        public IActionResult Index()
        {
            var strMetaTag = new StringBuilder();
            strMetaTag.AppendFormat(@"<meta content='{0}' name='Keywords'/>", "Keyword1, Keyword2, Keyword3 ");
            strMetaTag.AppendFormat(@"<meta content='{0}' name='Descption'/>", "Description Keyword");
            ViewBag.MetaTag = strMetaTag.ToString();
            ViewBag.Title = "Page Title Here";
            return View();
        }
    }

ونغير في الكود في View الى : 

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
    @Html.Raw(ViewBag.MetaTag);
</head>
<body>
</body>
</html>
شغل الصفحة والنتيجة بتكون :

تمام شوف النتيجة انو تم عرض القيم التالية ( الي تخزنت في Controller)

عرض العنوان من القيمة المخزنه في ViewBag.Title باستخدام الكود :

<title>@ViewBag.Title</title>

وتساوي

Page Title Here

عرض قيم meta  من القيمة المخزنة في ViewBag.MetaTag باستخدام الكود

 @Html.Raw(ViewBag.MetaTag);

بهدف تحويلها الى نص HTML 

والنتيجة تساوي

<meta content='Keyword1, Keyword2, Keyword3 ' name='Keywords'/><meta content='Description Keyword' name='Descption'/>; 

وايضا في action داخل controller حولنا القيم في المتغير strMetaTag الى string 

الكود: 

var strMetaTag = new StringBuilder();
            strMetaTag.AppendFormat(@"<meta content='{0}' name='Keywords'/>", "Keyword1, Keyword2, Keyword3 ");
            strMetaTag.AppendFormat(@"<meta content='{0}' name='Descption'/>", "Description Keyword");
            ViewBag.MetaTag = strMetaTag.ToString();
            ViewBag.Title = "Page Title Here";
            return View();