Làm cách nào để nhập một không gian tên trong Trang Xem Dao cạo?


Câu trả lời:


852

Cuối cùng cũng tìm được câu trả lời.

@using MyNamespace

Đối với VB.Net:

@Imports Mynamespace

Hãy xem câu trả lời của @ravy amir nếu bạn muốn bao gồm một không gian tên trên ứng dụng.


4
Ngoài ra: Họ không thể đi trong khối mã. (Bạn sẽ gặp lỗi thời gian chạy)
Dan Esparza

5
Ngoài ra, bạn không cần dấu chấm phẩy.
RPM1984

5
Đây chỉ là thời gian thực hành xấu. Vui lòng không thêm phần này vào đầu trang dao cạo của bạn. Điều này rất lộn xộn, v.v ... Cách chính xác là thêm vào Lượt xem - web.config giống như @Javad_Amiry chỉ ra.
Tom Stickel

21
Đó không phải là thực hành xấu. Đây là một tính năng hoàn toàn cần thiết. web.config giống như một câu lệnh sử dụng toàn cầu làm cho không gian tên hoạt động trong TẤT CẢ các trang của bạn. Đó có thể không phải là điều bạn muốn nếu bạn có các lớp có cùng tên trong các không gian tên khác nhau. Bạn vẫn sẽ có xung đột nếu bạn cố gắng sử dụng chúng trong cùng một tệp, nhưng bạn có thể giải quyết dễ dàng trong một tệp. Nếu bạn dán nó vào web.config, thì xung đột sẽ xuất hiện trong tất cả các trang của bạn sử dụng một trong hai lớp. Vì vậy, gọi đây là thực hành xấu không có ý nghĩa gì cả.
Triynko

4
Tôi ngạc nhiên khi Intellisense không gợi ý thêm câu lệnh sử dụng giống như cách làm trong các trang C # thông thường.
Triynko

397

Cách đầu tiên là sử dụng @usingcâu lệnh trong .cshtmlcác tệp, chỉ nhập một không gian tên vào tệp hiện tại và cách thứ hai:

Trong tệp "web.config" trong Viewsthư mục "" của dự án của bạn (lưu ý rằng đây không phải là web.config chính trong thư mục gốc của dự án) , tìm phần này:

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

bạn có thể thêm không gian tên tùy chỉnh của mình như thế này:

<add namespace="My.Custom" />

sẽ thêm không gian tên vào tất cả các tệp .cshtml (và / hoặc .vbhtml); bạn cũng có thể thay đổi chế độ xem kế thừa từ đây, như:

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

Trân trọng.


CẬP NHẬT: Nhờ @ Nick Silbersteinnhắc nhở của anh ấy về các lĩnh vực! Anh nói:

Nếu bạn đang làm việc trong một khu vực , bạn phải thêm vào namespacebên Web.configdưới /Areas/<AreaName>/Views/chứ không phải /Views/


10
@vtortola: web.config nào? tệp web.config trong thư mục Lượt xem, không phải web.config chính trong thư mục gốc. đồng ý?
rir amiry

9
Tôi hy vọng sẽ cứu ai đó vài phút nhổ tóc và nói rằng nếu bạn đang làm việc trong một khu vực, bạn phải thêm không gian tên trong Web.config trong / Area / <AreaName> Lượt xem / thay vì / Lượt xem/.
Nick Silberstein

11
@MatthijsWessels Không cần phải khởi động lại VS. Chỉ cần xây dựng dự án và nó sẽ có hiệu lực. Ít nhất tôi làm điều này luôn. Nếu một khung nhìn được mở, bạn phải đóng khung nhìn đó trước khi xây dựng và mở lại nó sau khi xây dựng.
rir amiry

2
@Javad_Amiry, aha, tôi đã xây dựng lại, nhưng không đóng được tầm nhìn.
Matthijs Wessels

1
Vâng, đây là cách chính xác. Không phải câu lệnh Sử dụng ở đầu trang Dao cạo như trong câu trả lời được chọn của OP ....
Tom Stickel

30

Đối với thư viện

@using MyNamespace

Dành cho người mẫu

@model MyModel

1
Tại sao không có; cuối cùng?
FrenkyB

2
@FrenkyB vì đây không phải là mã C #, đó là mã Dao cạo. Ở usingđầu tệp .cs là từ khóa trình biên dịch C #. Phần @usingđầu của tệp .cshtml là một gợi ý cho công cụ mẫu của dao cạo.
Đánh dấu

27

Trong ASP.NET MVC 3 Preview1, bạn có thể nhập một không gian tên trên tất cả các chế độ xem dao cạo của bạn với mã này trong Global.asax.cs

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

Tôi hy vọng trong RTM điều này được thực hiện thông qua phần Web.config.


6
Sẽ có một phần web.config trong RTM, nhưng chúng tôi cũng muốn cung cấp API để thực hiện việc này vì nhiều người dùng đang bắt đầu thu hút khỏi cấu hình. Vì vậy, chúng tôi có cả hai lựa chọn có sẵn cho bạn!
Andrew Stanton-Y tá

6
Kể từ ASP.NET MVC 3 Beta, phương pháp này không còn hoạt động. Có một phần web.config mới như được giải thích ở đây stackoverflow.com/questions/3875207/ . Phương thức AddGlobalImport để nhập một không gian tên toàn cầu cho tất cả các chế độ xem đã được chuyển sang lớp System.Web.WebPages.Razor.WebPagesRazorhost
Germán

16

Tôi tìm thấy http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx giải thích cách thêm một không gian tên tùy chỉnh cho tất cả các trang dao cạo của bạn.

Về cơ bản bạn có thể làm điều này

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

và đặt đoạn mã sau vào hội nghịInfo.cs của bạn

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

phương thức InitializeApplication sẽ được thực thi trước Application_Start trong global.asax


4
Đây thực sự là một câu trả lời khá tốt, nhưng vị trí của Microsoft.WebPages.Compilation.AddGlobalImportđã được thay đổi thành System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport.
2014

2
Ưu điểm lớn của việc sử dụng phương pháp này xuất phát từ thực tế là không gian tên sẽ có thể sử dụng được trong tất cả các chế độ xem (bao gồm cả các chế độ trong khu vực) trong khi được khai báo ở một nơi.
14

14

Một vấn đề mà bạn cần phải biết là khi bạn nhập một namespace qua web.configtrong Viewsthư mục, mà namespaceđược nhập khẩu JUST cho quan điểm trong đó thư mục . Có nghĩa là nếu bạn muốn nhập một chế độ xemnamespace trong khu vực , bạn cũng phải nhập tệp đó, trong tệp namespacecủa khu vực đó web.config, nằm trong Viewsthư mục của khu vực ;


11

Đối với không gian tên và thư viện

@using NameSpace_Name

Dành cho người mẫu

@model Application_Name.Models.Model_Name 

Đối với Lặp lại danh sách trên Trang Dao cạo (Bạn phải sử dụng vòng lặp foreach để truy cập các mục danh sách)

@model List<Application_Name.Models.Model_Name>

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


3

"Sử dụng MyNamespace" hoạt động trong MVC3 RTM. Hi vọng điêu nay co ich.


2

Tôi nghĩ để nhập không gian tên trong chế độ xem dao cạo, bạn chỉ cần thêm cách dưới đây:

@using XX.YY.ZZ

0

Tùy thuộc vào nhu cầu của bạn, bạn có thể sử dụng một trong các phương pháp sau:

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.