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.


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/


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

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.


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


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 ;


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


3

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


2

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

@using XX.YY.ZZ

0

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.