Является ли ASP.net MVC View "классом"? - PullRequest
10 голосов
/ 29 марта 2012

... прежде всего, я делаю это только из любопытства. Ничего реального применения здесь, но только для знания и возиться ...

ASP.NET Views имеет свойства, такие как Model и ViewData, и даже имеет методы.

Вы даже можете использовать @Using, как обычный class.cs файл.

Я знаю, что это типа WebPageView<TModel>

Мой главный вопрос: это класс?

Это должно быть потому, что это тип , но ..

Тогда я тоже смогу сделать это (двигатель Бритвы):

@{
   public class Person
   {
       //etc...
   }

   var p = new Person();
}

<span>@p.Name</span>

Однако я не могу .. почему?

примечание: в настоящее время C #, новичок ASP.net.

Ответы [ 3 ]

12 голосов
/ 29 марта 2012

Конечно, вам нужно использовать ключевое слово functions, чтобы раскрыть все элементы класса, такие как поля, свойства, методы и внутренние типы:

@functions {
   public class Person
   {
       public string Name { get; set; }
   }
}

@{
   var p = new Person();
}

<span>@p.Name</span>

Это будет прекрасно работать,

При этом имейте в виду, что единственная цель этих внутренних классов состоит в том, чтобы определить тип только для использования в представлении.Сам я никогда не обнаруживал необходимости делать это на уроках.Тем не менее, я воспользовался этой техникой, чтобы добавить новые методы, которые синтаксически невозможны с helper методами.

5 голосов
/ 29 марта 2012

Да, представления являются классами.Они скомпилированы во временную сборку (поэтому у них нет доступа к внутренним элементам основной сборки, что полезно знать при работе с динамическими / анонимными типами).

Я думаю, что в Razor есть правилокоторый запрещает объявлять внутренние классы, не проверял.

5 голосов
/ 29 марта 2012

Вы не можете сделать это, потому что разметка Razor скомпилирована в последовательность операторов внутри метода внутри сгенерированного класса, полученного из WebViewPage или WebViewPage

Более важный вопросхотя, почему вы хотите это сделать?Вместо этого предпочитайте держать Razor свободным от такой логики - его задача - создавать макет, а не делать какую-либо бизнес-логику или преобразование бизнес-данных.Сделайте всю тяжелую работу в вашем методе действия и предоставьте модель, которая описывает данные, необходимые для визуализации макета в формате, который требует только простой разметки Razor для обработки.

Существует довольно много уроков, описывающихкак подойти к MVC и Razor.Я выкопал этот, который является кратким, но делает разумную работу по освещению сквозной истории, которая может помочь вам получить идею.Он также включает в себя использование EF для получения данных, которые, возможно, больше, чем вы рассчитывали, - но стоит прочитать, чтобы получить полную картину того, как целая архитектура объединяется: http://weblogs.asp.net/shijuvarghese/archive/2011/01/06/developing-web-apps-using-asp-net-mvc-3-razor-and-ef-code-first-part-1.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...