ASP.NET MVC - استراتيجية لتضمين معلومات كبار المسئولين الاقتصاديين مثل الكلمات الرئيسية والأوصاف

StackOverflow https://stackoverflow.com/questions/4263568

  •  27-09-2019
  •  | 
  •  

سؤال

كنت أتساءل ما ، إذا كان هناك واحد ، هو أفضل ممارسة لإدراج محتوى SEO مثل أوصاف التعريف والكلمات الرئيسية في طريقة عرض ASP.NET MVC (أنا أستخدم V3 RC). تتمثل خطتي الأولية في إنشاء ActionFilter ، وتطبيقها على مستوى العالم على الإجراءات ، لسحب البيانات ذات الصلة من متجر بيانات وتمريرها كـ ViewData إلى العرض.

أسئلتي هي: 1) هل تتوقع أي مشاكل في هذا النهج؟ 2) هل هناك مناهج أخرى مناسبة؟ 3) ما هو متجر البيانات المناسب لاستخدامه هنا - هل يجب أن أسحب من DB (أو ذاكرة التخزين المؤقت في حالة توفر البيانات) ، واستخدم ملفات الموارد ، وملفات التكوين ، إلخ؟

شكرا مقدما،

JP

هل كانت مفيدة؟

المحلول

أود استخدام سمات على إجراءات وحدة التحكم الخاصة بي وإضافتها إلى ViewData في وحدة التحكم القاعدة الخاصة بي في الطريقة OnExecutingAction.

الدافع لوضعه في وحدة التحكم وليس الرأي هو أنه في الحقيقة معلومات أكثر حول الإجراء الفعلي أكثر من العرض. ويمكنك استخدامه عند إرجاع أنواع مختلفة من التنسيقات مثل JSON أو XML.

مراقب

class MyController
{

  [MetaKeywords("hello,world,something,else")]
  [MetaDescription("Tells you how to greet the world")]
  ActionResult Hello()
  {
      return View();
  }
}

يمكنك دائمًا استخدام ملف مورد بدلاً من السلاسل العادية.

في وحدة تحكم قاعدة:

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var keywords = filterContext.ActionDescriptor.GetCustomAttributes(typeof(MetaKeywordsAttribute), false);
        if (keywords.Length == 1)
            ViewData["MetaKeywords"] = keywords.Value;

        var description = filterContext.ActionDescriptor.GetCustomAttributes(typeof(MetaDescriptionAttribute), false);
        if (description.Length == 1)
            ViewData["MetaDescription"] = description.Value;

        base.OnActionExecuting(filterContext);
    }

في تخطيطك

<meta name="keywords" value="@View.MetaKeywords" />

وهنا الإجابات أسئلتك: =)

1) هل تتوقع أي مشاكل في هذا النهج؟

لا. إنه نهج جيد.

2) هل هناك مناهج أخرى مناسبة؟

فقط أعطاك بديلاً.

3) ما هو متجر البيانات المناسب لاستخدامه هنا - هل يجب أن أسحب من DB (أو ذاكرة التخزين المؤقت في حالة توفر البيانات) ، واستخدم ملفات الموارد ، وملفات التكوين ، إلخ؟

أود أن أضعه في نص عادي (إذا لم يكن عليك دعم لغات متعددة) ، وإلا في ملف مورد. لا يتم تغيير هذه المعلومات عادة ما لم يتم تغيير العرض أو وحدة التحكم (حيث تكون هناك حاجة إلى إعادة ترجمة على أي حال). وبالتالي لا حاجة لمصدر أكثر ديناميكية.

نصائح أخرى

هناك طريقة أخرى تتمثل في استخدام ببساطة في _layout.cshtml:

    <html>
    <head>
         <title>@ViewBag.Title</title>
         <meta name="description" content="@ViewBag.MetaDescription" />
         <meta name="keywords" content="@ViewBag.MetaKeywords" />
    </head>
    <body>

وفي وجهات نظركم ، يمكنك تحديد الحلوى بشكل منفصل لكل عرض العنوان/الوصف/الكلمات الرئيسية المقابلة:

على سبيل المثال في الصفحة الرئيسية/index.cshtml الاستخدام:

@{
    ViewBag.Title = "Home page title | samplePage.com";
    ViewBag.MetaDescription = "Home page meta description";
    ViewBag.MetaKeywords = "meta keywords keyword home page";
}

أضف قسمًا اختياريًا إلى صفحة التخطيط الخاصة بك:

<!DOCTYPE html>
<html>
<head>
  @RenderSection("ExtraHeadContent", required: false)
</head>
<body>

الآن يمكنك تحديد علامات التعريف على أي صفحة محتوى باستخدام @cection:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

@section ExtraHeadContent {
    <meta name="description" content="My super page">
}

<div>The main content</div>

نرى أقسام الحلاقة الاختيارية مع المحتوى الافتراضي بقلم مارسين دوبوز.

إذا كنت تستخدم صفحة رئيسية ، فيمكنك إنشاء أصحاب محتوى نائب لإيواء الكلمات الرئيسية والوصف ، والتي تقوم بتقديمها على العرض من البيانات في النموذج. يمكن أن تأتي البيانات الموجودة في النموذج مباشرة من حقل قاعدة البيانات أو من مساعد ينشئه بناءً على أشياء أخرى!

صفحة رئيسية:

<asp:contentplaceholder id="MetaTags" runat="server" />

رأي:

<asp:Content ID="Content1" ContentPlaceHolderID="MetaTags" runat="server">
    <meta name="keywords" content="<%= Model.Keywords %>">
    <meta name="description" content="<%= Model.Description %>">
</asp:Content>

1) هل تتوقع أي مشاكل في هذا النهج؟

رقم.

2) هل هناك مناهج أخرى مناسبة؟

أود أن أكتب طريقة مساعد لهذا أو استخدام عمل طفل جنبا إلى جنب مع Html.Action المساعد لأنك ستقوم بسحب البيانات من قاعدة البيانات.

3) ما هو متجر البيانات المناسب لاستخدامه هنا - هل يجب أن أسحب من DB (أو ذاكرة التخزين المؤقت في حالة توفر البيانات) ، واستخدم ملفات الموارد ، وملفات التكوين ، إلخ؟

يعتمد هذا على ما يفعله موقعك ، وكيف يتم تنظيمه ، وأين يتم تخزين المعلومات ، ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top