#asp.net-core #razor-pages
#asp.net-ядро #razor-страницы
Вопрос:
Я новичок в asp.net страница бритвы, извините, если мой вопрос звучит глупо.
Мне кажется, что оба @using
и @namespace
делают одно и то же, что позволяет вам не использовать полное имя, указанное в пространстве имен? so @using
и @namespace
взаимозаменяемы?
Ответ №1:
Нет, они не делают то же самое.
От https://www.learnrazorpages.com/razor-pages/files/viewimports:
@namespace
Директива определяет корневое пространство имен, которое будет использоваться страницами (и их моделями). По соглашению, он состоит из разделенного точками пути к местоположению страницы Razor с именем приложения, указанным в качестве «корня». Наличие @namespace
объявления в файле ViewImports избавляет вас от необходимости полностью указывать имена моделей в @model
директиве отдельных страниц.
У вас может быть только одна @namespace
директива для каждого файла ViewImports. Добавление нескольких @namespace
директив в один и тот же файл приведет к ошибкам сборки.
Вы можете добавить дополнительные @using
директивы, чтобы включить дополнительные пространства имен в область видимости:
@using MyApplication
@using MyApplication.Models
@using MyApplication.Services
@namespace MyApplication.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Комментарии:
1. @Mikr Приношу благодарность за ваш ответ, но все еще в замешательстве. В приведенном выше примере я тоже могу использовать
@using MyApplication.Pages
, не так ли?2. Да, вы можете, но вам это не нужно. Страницы уже находятся в этом пространстве имен, поэтому вам не нужно использовать
@using
, чтобы избежать необходимости использовать полное пространство имен, например@model
, в директивах. Но ты можешь, если захочешь.3. если
@namespace MyApplication.Pages
можно заменить на@using MyApplication.Pages
, то разве эти две вещи не одинаковы?4. Нет. Они не делают одного и того же.
@namespace
Директива задает пространство имен для страниц содержимого.@using
Директива этого не делает. Это позволяет сокращенно ссылаться на классы и т.д. в других пространствах имен.5. извините, что снова беспокою вас. Просто хочу подтвердить, что вы имеете в виду, что страница Razor может иметь свое собственное пространство имен? Я всегда думал, что только файл класса (.cs) может иметь пространство имен, так
.cshtml
может ли оно также иметь пространство имен? но разве код, стоящий за файлом страницы razor, уже не имеет пространства имен, например,index.cshtml.cs
может определять свое собственное пространство, и, похоже@namespace
, используется для установки пространстваindex.cshtml
имен, чтобы оно соответствовало его коду за пространством имен файлаindex.cshtml.cs
?