Как определить, какова модель вида и где он заполняется? - PullRequest
0 голосов
/ 30 декабря 2018

Я изучаю приложение C # ASP.NET MVC и с трудом ухожу назад от представления к коду, который выполняет хранимую процедуру, которая заполняет класс модели.Это осложняется (для меня) тем, что он использует Castle для IoC, поэтому я не могу просто искать new [Classname].

Любая помощь приветствуется.

Я скоро опубликую более подробный пример, но сейчас я просто объясню это так:

У каждого естьView, что относится к @model.Эта модель является классом, который заполняется через контроллер посредством вызова хранимой процедуры (или выполнения встроенного SQL) и передается в представление.

Проще говоря, мой вопрос:

  • Когда я вижу @model в представлении, как я могу определить, к какому классу относится @model,
  • Как мне найти место, где этот класс был заполнен данными до того, как они были переданы в представление?

1 Ответ

0 голосов
/ 31 декабря 2018

Как узнать, к какому классу относится @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
...