Jilet Görünümü Sayfasına bir ad alanını nasıl alabilirim?


Yanıtlar:


852

Sonunda cevabı buldum.

@using MyNamespace

VB.Net için:

@Imports Mynamespace

Uygulamaya bir ad alanı eklemek istiyorsanız @ravy amiry'nin cevabına bir göz atın .


4
Ayrıca: Kod bloklarına giremezler. (Bir çalışma zamanı hatası alırsınız)
Dan Esparza

5
Ayrıca noktalı virgül gerekmez.
RPM1984

5
Bu sadece kötü bir uygulama dönemi. Lütfen bunu ustura sayfalarınızın üstüne eklemeyin. Bu dağınık vs ... Doğru yol Views'a eklemektir - web.config @Javad_Amiry'nin işaret ettiği gibi.
Tom Stickel

21
Kötü bir uygulama değil. Kesinlikle gerekli bir özellik. web.config, TÜM sayfalarınızda ad alanını etkin hale getiren genel bir kullanım ifadesi gibidir. Farklı ad alanlarında aynı ada sahip sınıflarınız varsa, bu istediğiniz olmayabilir. Aynı dosyada kullanmaya çalışırsanız yine de bir çakışma yaşarsınız, ancak bunu tek bir dosyada kolayca çözebilirsiniz. Web.config dosyasına yapıştırırsanız, sınıflardan birini kullanan tüm sayfalarınızda çakışma ortaya çıkar. Yani bu kötü uygulamayı çağırmak hiç mantıklı değil.
Triynko

4
Intellisense kullanım deyimini normal C # sayfalarında olduğu gibi eklemeyi düşünmediğine şaşırdım.
Triynko

397

Birinci yol, dosyalarda şu anki dosyaya bir ad alanı aktaran @usingdeyimi kullanmak .cshtmlve ikincisi:

ViewsProjenizin " " dizinindeki "web.config" dosyasında ( projenin kökündeki ana web.config olmadığına dikkat edin ) , bu bölümü bulun:

<system.web.webPages.razor>
  <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <namespaces>
      <add namespace="System.Web.Mvc" />
      <add namespace="System.Web.Mvc.Ajax" />
      .
      .
      <!-- etc -->
    </namespaces>
  </pages>
</system.web.webPages.razor>

özel ad alanınızı şu şekilde ekleyebilirsiniz:

<add namespace="My.Custom" />

ad alanını tüm .cshtml (ve / veya .vbhtml) dosyalarına ekler; Ayrıca buradan devralma görüntülerini buradan değiştirebilirsiniz:

<pages pageBaseType="My.Custom.MyWebViewPage">

Saygılarımızla.


GÜNCELLEME: @ Nick Silbersteinalanlarıyla ilgili hatırlatması sayesinde ! Dedi ki:

Bir dahilinde çalışıyorsanız alanda , eklemek gerekir namespaceiçindeki Web.configunder /Areas/<AreaName>/Views/ziyade /Views/


10
@vtortola: hangi web.config? Görünümler klasöründeki web.config dosyası, kök klasördeki ana web.config dosyası değil. tamam?
ravy amiry

9
Umarım birilerini saçlarını çekerek birkaç dakika kurtarmak ve bir alanda çalışıyorsanız, ad alanını Web.config içinde / Fields / <AreaName> Views / yerine / Görüntüleme/.
Nick Silberstein

11
@MatthijsWessels Hayır VS'yi yeniden başlatmaya gerek yoktur. Sadece projeyi inşa edin ve yürürlüğe girecek. En azından bunu her zaman yaparım. Bir görünüm açıksa, derlemeden önce bu görünümü kapatmanız ve derlemeden sonra yeniden açmanız gerekir.
ravy amiry

2
@Javad_Amiry, aha, yeniden inşa ettim ama görünümü kapatmadım.
Matthijs Wessels

1
Evet, doğru yol bu. Razor sayfasının üst kısmında OP seçilen yanıtta olduğu gibi kullanma ifadesi değil ....
Tom Stickel

30

Kütüphane için

@using MyNamespace

Model için

@model MyModel

1
Neden yok; sonunda?
FrenkyB

2
@FrenkyB çünkü bu C # kodu değil, ustura kodu. usingBir .cs dosyasının başında bir C # derleyicisi anahtar kelimedir. @usingBir .cshtml dosyasının başında Jilet şablon motoruna bir ipucu.
Mark

27

ASP.NET MVC 3 Preview1'de, bu kodla Global.asax.cs içindeki tüm ustura görünümlerinize bir ad alanı alabilirsiniz

Microsoft.WebPages.Compilation.CodeGeneratorSettings.AddGlobalImport("Namespace.Namespace");

Umarım RTM'de bu Web.config bölümünden yapılır.


6
RTM'de bir web.config bölümü olacak, ancak bunun için bir API sağlamak istedik çünkü birçok kullanıcı config'ten uzaklaşmaya başlıyor. Yani sizin için her iki seçeneğimiz de var!
Andrew Stanton-Nurse

6
ASP.NET MVC 3 Beta sürümünden itibaren bu yöntem artık çalışmaz. Burada açıklandığı gibi yeni bir web.config bölümü var stackoverflow.com/questions/3875207/… . Tüm görünümlere genel bir ad alanı almak için AddGlobalImport yöntemi bu sınıfa System.Web.WebPages.Razor.WebPagesRazorHost
Germán

16

Tüm http 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 adresini buldum .

Temel olarak bunu yapabilirsiniz

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

ve aşağıdaki kodu AssemblyInfo.cs dosyasına yerleştirin

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

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


4
Bu aslında oldukça iyi bir cevap, ama yeri Microsoft.WebPages.Compilation.AddGlobalImportolarak değiştirildi System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport.
jahu

2
Bu yöntemi kullanmanın en büyük avantajı, ad alanının yalnızca tek bir yerde bildirilirken tüm görünümlerde (alanlar dahil olanlar dahil) kullanılabilmesidir.
jahu

14

Bildiğiniz gerektiğini Tek sorun, bir ad aracılığıyla içe aktarırken olmasıdır web.configiçinde Viewsklasör, yani namespaceiçe SADECE ki görünümleri için klasöre . Bir içe aktarmak istiyorsa araçlar namespacebir in alanı görünümleri , bunu da içe aktarmanız gerekir namespaceo bölgenin içinde, web.configbölgenin bulunan dosyanın, Viewsklasörün;


11

İsim alanı ve Kütüphane için

@using NameSpace_Name

Model için

@model Application_Name.Models.Model_Name 

Jilet Sayfasındaki listeyi yineleme için (Liste öğelerine erişmek için foreach döngüsü kullanmanız gerekir)

@model List<Application_Name.Models.Model_Name>

@foreach (var item in Model)
   {  
          <tr>
                <td>@item.srno</td>
                <td>@item.name</td>
         </tr>  
   }


3

"MyNamespace kullanımı" MVC3 RTM'de çalışır. Bu yardımcı olur umarım.


2

Ben jilet görünümünde ithalat ad alanı sırayla, sadece aşağıdaki şekilde eklemeniz gerekir düşünüyorum:

@using XX.YY.ZZ

0

İhtiyacınıza bağlı olarak aşağıdaki yöntemlerden birini kullanabilirsiniz:

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.