@ Bildirimi kullanmak yerine Razor sayfalarına fazladan ad alanları nasıl eklenir?


146

pages/namespacesWebconfig içindeki öğedeki ad alanlarını almak için kullanmam gereken bir tür sihir var mı ?

<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>

Yukarıda sadece gelmez işe istiyorum. İsim alanının iyi olduğunu biliyorum çünkü @using MyCustomHelperssayfanın en üstüne koyduğumda sihirli bir şekilde çalışıyor.

Bu, tüm sayfalarımın en üstüne Html.SomeFunction()koymak zorunda kalmadan çalışabilmem için@using


1
MVC 3'ün hangi sürümünü kullanıyorsunuz?
marcind

MVC 3 Önizleme kullanıyordum, bu yüzden diğer cevap benim için çalıştı ve yükseltmeden sonra bile hala çalışıyor ... ancak cevabınız yeni sürüm için daha uygun görünüyor - kısa süre sonra yükselteceğim. Yazık ki iki cevabı kabul edemem.
MyNameIsJob

Yanıtlardaki yorumlardan net değil, ancak MVC4'te ad alanının Web.Config uygulamasına DEĞİL \ Views klasöründeki Web.Config dosyasına eklenmesi gerekir. <system.web.webPages.razor>Yapılandırma bölüm zaten OLDUĞUNU Web.config bulunmalıdır!
Ben McIntyre

Yanıtlar:


163

Güncelleme : lütfen MVC 3 RC: Razor HtmlHelper Uzantıları (veya görünümler için diğer ad alanları) için geçerli olan güncellenmiş cevabıma bir göz atın. Bulunamadı

Bu, MVC 3 Preview 1 ve MVC 3 Beta (bugün piyasaya sürüldü) arasında değişti. Preview 1 Razor'da WebForms ad alanları yapılandırma bölümünü kullandı. Ancak Beta'da WebForms'dan ayrı yeni bir yapılandırma bölümü vardır. Follwing'i web.config dosyanıza eklemeniz (veya şablondan yepyeni bir projeyle başlamanız gerekir):

<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>

Düzenleyici tarafından değişikliklerin alınması için dosyayı kapatıp yeniden açmanız gerekebileceğini unutmayın .

Razor'un MVC3 Beta'da çalışmasını sağlamak için web.config dosyasında gerekli olanlarda başka değişiklikler olduğunu unutmayın, bu nedenle ~\View\Web.configBeta proje şablonlarında gönderilen dosyaya bir göz atmanızın en iyisi olur .


2
FWIW, pageBaseType="System.Web.Mvc.WebViewPage"özniteliğin de gerekli olduğunu buldum . Cevabınızı güncelledim.
Portman

1
MVC 3 RC için yaptığınızla aynı mı?
Clark

1
+1 TEŞEKKÜR EDERİZ. Bugün bu sorunun cevabını bulmak için çok zaman harcadım.
jessegavin

32
o çalışma veya bir hata vermiyor eğer sona büyük olasılıkla gereksinim ve .cshtml dosyayı yeniden edeceğiz
Simon_Weaver

1
@Simon evet, dosyayı güncellemeniz gerekiyor. Düzenleyici şu anda web.config değişikliklerini izlemiyor.
marcind

50

Ad alanı bildiriminizi Web.configkök "Görünümler" klasörüne ve / veya geçerli alanın "Görünümler" klasörüne (görünümünüzün nerede olduğuna bağlı olarak) koyarsanız, beklendiği gibi çalışmalıdır.


6

Tüm jilet sayfalarınıza nasıl özel bir ad alanı ekleyeceğinizi açıklayan bu http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx buldum .

Temelde bunu yapabilirsiniz

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

ve AssemblyInfo.cs dosyanıza aşağıdaki kodu koyun

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

InitializeApplication yöntemi global.asax içinde Application_Start'tan önce yürütülecektir


Yöntem System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport ("Fully.Qualified.Namespace") konumuna taşındı;
agrath

4

Değeri ne olursa olsun, başka bir teknik, yardımcı uzantı sınıfınızı varsayılan olarak görünüm motoru tarafından zaten dahil edilen bir Sistem ad alanına koymaktır. Örneğin:

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

Bu şekilde, sınıfı içeren kitaplığa başvurulduğu sürece, her şey onu görecek. Bir System.Web.Mvcsınıfı genişlettiğiniz için , uzantı yöntemlerini aynı ad alanına koymak makul ölçüde kabul edilebilir görünüyor.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.