ฉันจะนำเข้าเนมสเปซในหน้าดูมีดโกนได้อย่างไร


คำตอบ:


852

ในที่สุดก็พบคำตอบ

@using MyNamespace

สำหรับ VB.Net:

@Imports Mynamespace

ลองดูที่คำตอบของ @ravy amiryหากคุณต้องการรวม namespace ไว้ในแอพ


4
นอกจากนี้: พวกมันไม่สามารถเข้าไปในบล็อคโค้ดได้ (คุณจะได้รับข้อผิดพลาดขณะทำงาน)
Dan Esparza

5
นอกจากนี้คุณไม่จำเป็นต้องใช้เครื่องหมายอัฒภาค
RPM1984

5
นี่เป็นเพียงช่วงเวลาฝึกที่ไม่ดี โปรดอย่าเพิ่มสิ่งนี้ไว้ที่ด้านบนของหน้ามีดโกนของคุณ นี่คือสิ่งที่ยุ่ง ฯลฯ ... วิธีที่ถูกต้องคือการเพิ่มใน Views - web.config เช่นเดียวกับ @Javad_Amiry ชี้ให้เห็น
Tom Stickel

21
มันไม่ใช่การฝึกฝนที่ไม่ดี มันเป็นคุณสมบัติที่จำเป็นอย่างยิ่ง web.config เปรียบเสมือนโกลบอลที่ใช้คำสั่งที่ทำให้เนมสเปซแอ็คทีฟในทุกหน้าของคุณ นั่นอาจไม่ใช่สิ่งที่คุณต้องการถ้าคุณมีคลาสที่มีชื่อเดียวกันในเนมสเปซที่ต่างกัน คุณจะยังคงมีข้อขัดแย้งหากคุณพยายามใช้ในไฟล์เดียวกัน แต่คุณสามารถแก้ไขได้อย่างง่ายดายภายในไฟล์เดียว หากคุณใส่ไว้ใน web.config ความขัดแย้งจะเกิดขึ้นในทุกหน้าของคุณที่ใช้คลาสใดคลาสหนึ่ง ดังนั้นการเรียกการฝึกฝนที่ไม่ดีนี้จึงไม่สมเหตุสมผลเลย
Triynko

4
ฉันประหลาดใจ Intellisense ไม่ได้บอกใบ้ให้เพิ่มคำสั่งการใช้เช่นเดียวกับในหน้า C # ปกติ
Triynko

397

วิธีแรกคือใช้@usingคำสั่งใน.cshtmlไฟล์ที่นำเข้าเนมสเปซไปยังไฟล์ปัจจุบันเท่านั้นและที่สอง:

ในไฟล์ "web.config" ในViewsไดเรกทอรี "" ของโครงการของคุณ (สังเกตว่าไม่ใช่ web.config หลักในรูทของโครงการ)ค้นหาส่วนนี้:

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

คุณสามารถเพิ่มเนมสเปซที่กำหนดเองดังนี้:

<add namespace="My.Custom" />

ที่จะเพิ่มเนมสเปซให้กับไฟล์. cshtml (และ / หรือ. vbhtml) ทั้งหมด นอกจากนี้คุณสามารถเปลี่ยนการรับชมจากที่นี่เช่น:

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

ความนับถือ.


อัปเดต:ขอบคุณ @ ด้วยNick Silbersteinการเตือนความจำของเขาเกี่ยวกับพื้นที่! เขาพูดว่า:

หากคุณกำลังทำงานอยู่ในพื้นที่ที่คุณต้องเพิ่มnamespaceภายในWeb.configภายใต้/Areas/<AreaName>/Views/มากกว่า /Views/


10
@vtortola: web.config ใด ไฟล์ web.config ในโฟลเดอร์ Views ไม่ใช่ไฟล์ web.config หลักในโฟลเดอร์รูท ตกลง?
ravy amiry

9
ฉันหวังว่าจะช่วยให้ใครบางคนประหยัดเวลาในการดึงผมออกมาและพูดว่าถ้าคุณทำงานในพื้นที่คุณต้องเพิ่มเนมสเปซใน Web.config ภายใต้ / พื้นที่ / <AreaName> Views / แทนที่จะเป็น ชม /
Nick Silberstein

11
@MatthijsWessels ไม่จำเป็นต้องรีสตาร์ท VS เพียงสร้างโครงการและจะมีผล อย่างน้อยฉันก็ทำสิ่งนี้เสมอ หากมุมมองเปิดอยู่คุณจะต้องปิดมุมมองนั้นก่อนที่จะสร้างและเปิดอีกครั้งหลังจากที่สร้างเสร็จแล้ว
ravy amiry

2
@Javad_Amiry, aha ฉันสร้างใหม่ แต่ไม่ได้ปิดมุมมอง
Matthijs Wessels

1
ใช่นี่เป็นวิธีที่ถูกต้อง ไม่ใช่การใช้คำสั่งที่ด้านบนของหน้ามีดโกนเหมือนในคำตอบที่เลือก OP ....
Tom Stickel

30

สำหรับห้องสมุด

@using MyNamespace

สำหรับรุ่น

@model MyModel

1
ทำไมไม่มี ในตอนท้าย?
FrenkyB

2
@FrenkyB เพราะนี่ไม่ใช่รหัส C # แต่เป็นรหัสมีดโกน usingที่จุดเริ่มต้นของ CS ไฟล์เป็นคำหลักเรียบเรียง C # @usingที่จุดเริ่มต้นของไฟล์ .cshtml คือคำใบ้กับแม่แบบเครื่องยนต์มีดโกน
ทำเครื่องหมาย

27

ใน ASP.NET MVC 3 Preview1 คุณสามารถนำเข้าเนมสเปซในทุกมุมมองมีดโกนของคุณด้วยรหัสนี้ใน Global.asax.cs

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

ฉันหวังว่าใน RTM สิ่งนี้จะทำผ่านส่วน Web.config


6
จะมีส่วน web.config ใน RTM แต่เราต้องการให้ API ทำเช่นนี้เพราะผู้ใช้หลายคนเริ่มที่จะหลีกเลี่ยงการตั้งค่า ดังนั้นเราจึงมีตัวเลือกทั้งสองสำหรับคุณ!
Andrew Stanton-Nurse

6
ในฐานะของ ASP.NET MVC 3 Beta วิธีนี้ใช้งานไม่ได้อีกต่อไป มีส่วน web.config ใหม่ตามที่อธิบายไว้ที่นี่เป็นstackoverflow.com/questions/3875207/... วิธี AddGlobalImport สำหรับการนำเข้า namespace ที่ทั่วโลกเพื่อทุกมุมมองได้ถูกย้ายไป System.Web.WebPages.Razor.WebPagesRazorHost ชั้นนี้
Germán

16

ฉันพบ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")]

วิธีการเริ่มต้นการสมัครจะถูกดำเนินการก่อน Application_Start ใน global.asax


4
นี้เป็นจริงคำตอบที่ค่อนข้างดี แต่สถานที่ตั้งของก็เปลี่ยนไปMicrosoft.WebPages.Compilation.AddGlobalImport System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport
jahu

2
ข้อได้เปรียบที่ยิ่งใหญ่ของการใช้วิธีนี้มาจากข้อเท็จจริงที่ว่าเนมสเปซจะสามารถใช้งานได้ในทุกมุมมอง
jahu

14

ปัญหาหนึ่งที่คุณต้องทราบก็คือเมื่อคุณนำเข้า namespace ผ่านweb.configในViewsโฟลเดอร์ที่namespaceนำเข้าเพียงเพื่อดูในโฟลเดอร์นั้น หมายความว่าถ้าคุณต้องการนำเข้าnamespaceในมุมมองพื้นที่คุณจะต้องนำเข้านั้นnamespaceในweb.configไฟล์ของพื้นที่นั้นซึ่งอยู่ในViewsโฟลเดอร์ของพื้นที่


11

สำหรับ namespace และ Library

@using NameSpace_Name

สำหรับรุ่น

@model Application_Name.Models.Model_Name 

สำหรับการวนซ้ำรายการในหน้ามีดโกน (คุณต้องใช้ foreach loop เพื่อเข้าถึงรายการ)

@model List<Application_Name.Models.Model_Name>

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



2

ฉันคิดว่าในการสั่งซื้อ namespace ในมุมมองมีดโกนคุณเพียงแค่ต้องเพิ่มวิธีด้านล่าง:

@using XX.YY.ZZ

0

ขึ้นอยู่กับความต้องการของคุณคุณสามารถใช้วิธีใดวิธีหนึ่งต่อไปนี้:

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.