كيفية إضافة مساحات أسماء إضافية إلى صفحات الحلاقة بدلاً من استخدام الإعلان؟

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

  •  28-09-2019
  •  | 
  •  

سؤال

هل هناك نوع من السحر الذي أحتاج إلى استخدامه للحصول على مساحات الأسماء في pages/namespaces عنصر في webConfig؟

<pages>
    <namespaces>
        <add namespace="System.Web.Mvc"/>
        <add namespace="System.Web.Mvc.Ajax"/>
        <add namespace="System.Web.Mvc.Html"/>
        <add namespace="System.Web.Routing"/>
        <add namespace="System.Web.WebPages"/>
        <add namespace="System.Web.Helpers"/>
        <add namespace="MyCustomHelpers"/>
    </namespaces>
</pages>

ما سبق فقط لا اريد ان اعمل. أعلم أن مساحة الاسم جيدة لأنه عندما أضع @using MyCustomHelpers في الجزء العلوي من الصفحة يعمل بطريقة سحرية.

هذا حتى أتمكن من الحصول على Html.SomeFunction() للعمل دون الحاجة إلى وضع @using في الجزء العلوي من جميع صفحاتي

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

المحلول

تحديث: يرجى إلقاء نظرة على إجابتي المحدثة التي تنطبق على MVC 3 RC: لم يتم العثور على امتدادات HtmlHelper Razor

لقد تغير هذا بين MVC 3 Preview 1 و MVC 3 Beta (تم إصداره اليوم فقط). في معاينة 1 يستخدم Razor قسم تكوين مساحات أسماء WebForms. ومع ذلك ، يوجد قسم تكوين جديد في الإصدار التجريبي يفصل عن القسم القسم. ستحتاج إلى إضافة follwing إلى ملف الويب الخاص بك.

<configSections>
  <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  </sectionGroup>
</configSections>

<system.web.webPages.razor>
  <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <namespaces>
      <add namespace="MyCustomHelpers" />
    </namespaces>
  </pages>
</system.web.webPages.razor>

ملحوظة قد تحتاج إلى إغلاق الملف وإعادة فتحه للتغييرات التي سيتم التقاطها من قبل المحرر.

لاحظ أن هناك تغييرات أخرى على ما هو مطلوب في الويب. ~\View\Web.config الملف الذي يشحن في قوالب مشروع تجريبي.

نصائح أخرى

إذا وضعت إعلان مساحة الاسم في Web.config في مجلد "طرق العرض" الجذر و/أو مجلد "طرق العرض" للمنطقة الحالية (اعتمادًا على مكان وجودك) - يجب أن يعمل كما هو متوقع.

لقد وجدت هذا http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx وهو ما يفسر كيفية إضافة مساحة اسم مخصصة لجميع صفحات الحلاقة الخاصة بك.

في الأساس يمكنك عمل هذا

using Microsoft.WebPages.Compilation;
public class PreApplicationStart
{
   public static void InitializeApplication()
   {
       CodeGeneratorSettings.AddGlobalImport("Custom.Namespace");
   }
}

ووضع الكود التالي في AssemblyInfo.cs

[assembly: PreApplicationStartMethod(typeof(PreApplicationStart), "InitializeApplication")]

سيتم تنفيذ الطريقة initializeApplication قبل application_start في global.asax

لما يستحق الأمر ، هناك تقنية أخرى تتمثل في وضع فئة امتداد المساعد في مساحة اسم النظام التي تم تضمينها بالفعل بواسطة محرك View افتراضيًا. فمثلا:

namespace System.Web.Mvc
{
    public static class HtmlHelper_MyExtensions
    {
        ...
    }
}

وبهذه الطريقة ، طالما تمت الإشارة إلى المكتبة التي تحتوي على الفصل ، فسيراها كل شيء. بما أنك تمتد System.Web.Mvc الفصل ، يبدو من المقبول بشكل معقول وضع أساليب التمديد في نفس مساحة الاسم.

حاول إغلاق العرض وإعادة فتح العرض بعد التأكد من إجراء التغييرات على الويب.

الإغلاق وإعادة فتح محدد مشكلتي.

انظر هنا:

ASP.NET MVC 4 مسألة مساحة الاسم في Razor View

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