Bagaimana cara mengimpor namespace di Halaman Tampilan Razor?

Jawaban:

852

Akhirnya menemukan jawabannya.

@using MyNamespace

Untuk VB.Net:

@Imports Mynamespace

Lihatlah jawaban @ravy amiry jika Anda ingin menyertakan namespace di seluruh aplikasi.

Amitabh
sumber
4
Juga: Mereka tidak bisa masuk dalam blok kode. (Anda akan mendapatkan kesalahan runtime)
Dan Esparza
5
Anda juga tidak perlu titik koma.
RPM1984
5
Ini hanya periode latihan yang buruk. Tolong jangan menambahkan ini ke bagian atas halaman pisau cukur Anda. Ini berantakan dll ... Cara yang benar adalah menambahkan ke Views - web.config seperti yang ditunjukkan oleh @Javad_Amiry.
Tom Stickel
21
Itu bukan praktik yang buruk. Ini fitur yang mutlak diperlukan. web.config seperti pernyataan penggunaan global yang membuat namespace aktif di SEMUA halaman Anda. Itu mungkin bukan yang Anda inginkan jika Anda memiliki kelas dengan nama yang sama di ruang nama yang berbeda. Anda masih akan mengalami konflik jika Anda mencoba menggunakannya dalam file yang sama, tetapi Anda dapat menyelesaikannya dengan mudah dalam satu file. Jika Anda menempelkannya di web.config, maka konflik akan muncul di semua halaman Anda yang menggunakan salah satu kelas. Jadi menyebut praktik buruk ini sama sekali tidak masuk akal.
Triynko
4
Saya terkejut Intellisense tidak mengisyaratkan untuk menambahkan pernyataan menggunakan seperti halnya di halaman C # normal.
Triynko
397

Cara pertama adalah yang menggunakan @usingpernyataan dalam .cshtmlfile, yang mengimpor namespace ke file saat ini saja, dan yang kedua:

Di Viewsdirektori "web.config" di " " proyek Anda (perhatikan itu bukan web.config utama di root proyek) , temukan bagian ini:

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

Anda dapat menambahkan namespace khusus Anda seperti ini:

<add namespace="My.Custom" />

yang akan menambahkan namespace ke semua file .cshtml (dan / atau .vbhtml); Anda juga dapat mengubah tampilan warisan dari sini, seperti:

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

Salam.


UPDATE: Terima kasih kepada @ Nick Silbersteinuntuk pengingatnya tentang area! Dia berkata:

Jika Anda bekerja dalam suatu area , Anda harus menambahkan bagian namespacedalam di Web.configbawah /Areas/<AreaName>/Views/daripada /Views/

Amiry ravy
sumber
10
@vtortola: web.config yang mana? file web.config di folder Views, bukan web.config utama di folder root. baik?
amiry ravy
9
Mudah-mudahan saya ingin menyelamatkan seseorang beberapa menit dari mencabut rambut mereka dan mengatakan bahwa jika Anda bekerja dalam suatu area, Anda harus menambahkan namespace di Web.config di bawah / Areas / <AreaName> Tampilan / daripada / Tampilan /.
Nick Silberstein
11
@MatthijsWessels Tidak tidak perlu memulai ulang VS. Hanya membangun proyek dan itu akan berlaku. Setidaknya saya selalu melakukan ini. Jika tampilan terbuka, Anda harus menutup tampilan itu sebelum membangun dan membukanya kembali setelah membangun.
ravy amiry
2
@Javad_Amiry, aha, saya membangun kembali, tetapi tidak menutup tampilan.
Matthijs Wessels
1
Ya, ini cara yang benar. Bukan pernyataan Menggunakan di bagian atas halaman Razor seperti pada jawaban yang dipilih OP ....
Tom Stickel
30

Untuk Perpustakaan

@using MyNamespace

Untuk Model

@model MyModel
Alper Şaldırak
sumber
1
Mengapa tidak ada; pada akhirnya?
FrenkyB
2
@FrenkyB karena ini bukan kode C #, ini adalah kode Razor. Di usingawal file .cs adalah kata kunci kompiler C #. Di @usingawal file .cshtml adalah petunjuk untuk mesin template Razor.
Markus
27

Dalam ASP.NET MVC 3 Preview1 Anda dapat mengimpor namespace pada semua tampilan pisau cukur Anda dengan kode ini di Global.asax.cs

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

Saya harap dalam RTM ini dilakukan melalui bagian Web.config.

Jerman
sumber
6
Akan ada bagian web.config di RTM, tetapi kami juga ingin menyediakan API untuk melakukan ini karena banyak pengguna mulai tertarik jauh dari konfigurasi. Jadi kami memiliki kedua opsi yang tersedia untuk Anda!
Andrew Stanton-Perawat
6
Pada ASP.NET MVC 3 Beta metode ini tidak lagi berfungsi. Ada bagian web.config baru seperti yang dijelaskan di sini stackoverflow.com/questions/3875207/… . Metode AddGlobalImport untuk mengimpor ruang nama global ke semua tampilan telah dipindahkan ke kelas System.Web.WebPages.Razor.WebPagesRazorHost
Germ
16

Saya menemukan http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx yang menjelaskan cara menambahkan ruang nama khusus ke semua halaman pisau cukur Anda.

Pada dasarnya kamu bisa membuat ini

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

dan letakkan kode berikut di AssemblyInfo.cs Anda

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

metode InitializeApplication akan dijalankan sebelum Application_Start di global.asax

k-dev
sumber
4
Ini sebenarnya jawaban yang agak bagus, tetapi lokasi Microsoft.WebPages.Compilation.AddGlobalImportdiubah menjadi System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport.
jahu
2
Keuntungan besar menggunakan metode ini berasal dari kenyataan bahwa namespace akan dapat digunakan di semua tampilan (termasuk yang ada di dalam area) sementara dinyatakan hanya di satu tempat.
jahu
14

Satu masalah yang harus Anda ketahui adalah bahwa ketika Anda mengimpor namespace melalui web.configdi Viewsfolder, yang namespacediimpor HANYA untuk tampilan di folder itu . Berarti jika Anda ingin mengimpor namespacedalam tampilan area , Anda juga harus mengimpor itu namespace, dalam web.configfile area itu , yang terletak di Viewsfolder area ;


sumber
11

Untuk namespace dan Perpustakaan

@using NameSpace_Name

Untuk Model

@model Application_Name.Models.Model_Name 

Untuk Iterate daftar pada Halaman Razor (Anda harus menggunakan foreach loop untuk mengakses item daftar)

@model List<Application_Name.Models.Model_Name>

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

Anda bisa mencoba ini

@using MyNamespace
Abhishek Siddhu
sumber
3

"using MyNamespace" berfungsi di MVC3 RTM. Semoga ini membantu.

Howard
sumber
2

Saya pikir untuk mengimpor namespace dalam tampilan pisau cukur, Anda hanya perlu menambahkan cara di bawah ini:

@using XX.YY.ZZ
HiteshAjudiya
sumber
0

Tergantung pada kebutuhan Anda, Anda dapat menggunakan salah satu metode berikut:

Imran Javed
sumber