Как узнать, к какому классу относится @model?
Точно так же, как вы можете перейти к определению элемента кода в .cs
файлах, вы можете сделать это в .cshtml
файлах.также.Нажмите на название типа перед @model
и нажмите F12 или Щелкните правой кнопкой мыши → Перейти к определению , чтобы увидеть определение типа, или выберите Перейти к реализации для просмотра реализации, если она доступна.
Если у вас нет @model
, класс представления является производным от WebViewPage<dynamic>
, модель для представления - dynamic
.Если у вас есть @model Something
класс представления, производный от WebViewPage<Something>
, и модель для представления является Something
.
Предполагая, что у вас есть класс SampleModel
в пространстве имен SampleProject.Models
, следующие способы:некоторые способы, которыми вы можете объявить @model
для представления Index.cshtml
, которое находится в папке Home
, в папке Views
:
Без какой-либо @ model
<div> Hello! </div>
FullName в представлении
@model SampleProject.Models.SampleModel
<div> Hello! </div>
Использование и имя в представлении:
@using SampleProject.Models
@model SampleModel
<div> Hello! </div>
Пространство имен в web.config и Имя в представлении
Наличие записи пространства имен в web.config
в корнепроект, либо в папке Views
, либо в папке просмотра (например, в папке Home
):
<system.web.webPages.razor>
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
...
<add namespace="SampleProject.Models" />
...
</namespaces>
</pages>
</system.web.webPages.razor>
И имя в файле просмотра:
@model SampleModel
<div> Hello! </div>
Как найти место, где этот класс был заполнен данными до того, как они были переданы в представление?
Короче говоря, во время разработки представление не знает, откуда берутся его данные, а действие знает, какие именновзгляд идетвозвращать.Во время выполнения представление знает, какое действие вернуло его.
Время разработки
В MVC представление не принадлежит контроллеру и никаким действиямконтроллер может просто вернуть вид.Таким образом, View
во время разработки не имеет родительского контроллера / действия, в то время как действие знает, какое представление они собираются вернуть.
Однако в простых случаях, когда между представлениями имеется отношение 1-1и действиям, представление по следующему пути Views\Home\Index
обычно возвращается Index
действием класса HomeController
.
В простых случаях, когда вы кодируете вид, если вы Щелкните правой кнопкой мыши и выберите Перейти к контроллеру , он перейдет к классу контроллера на основе имени папкизрения.Когда вы кодируете в контроллере и Щелкните правой кнопкой мыши в теле имени Action и выберите Перейти к представлению , оно перейдет к представлению с тем же именем, что иВаше действие в папке с тем же именем, что и у вашего контроллера (без суффикса контроллера) в папке views.
Время выполнения
Во время выполнения каждое представление знает, какой контроллер / действие вернуло его:
@ViewContext.RouteData.Values["controller"]
@ViewContext.RouteData.Values["action"]
@ViewContext.Controller