2015-08-18 1 views
2

У меня возникли проблемы, обертывая мою голову вокруг того, как работает синтаксис Razor.Как синтаксис Microsoft Razor запускает код на стороне сервера, не подвергая его клиенту?

Я понимаю, что он позволит вам встроить код на стороне сервера непосредственно на страницу, но он сохраняет все это от клиента, даже если клиент может взаимодействовать с ним.

Я привык к веб-представлениям ASP.net и вещам такого характера - синтаксис Razor по существу делает обратные вызовы, и весь код содержится внутри страницы или способ взаимодействия клиента с сервером, боковой код принципиально отличается?

Если это слишком открыто, пожалуйста, оставьте мне комментарии относительно того, как сфокусировать вопрос больше. Боюсь, я еще недостаточно понимаю, чтобы задавать тонкие вопросы.

Спасибо!

+2

Так же, как старый ASP, как PHP, серверная сторона рамки обрабатывает код и выдает результат в виде страницы для клиента. Он не выполняет никаких обратных связей и не проводит каких-либо магии, он просто обрабатывает компоненты на стороне сервера, что приводит к отправке страницы клиенту. Напишите проект ASP.NET, откройте его в браузере, посмотрите на источник страницы. – David

ответ

3

Из моего понимания:

1. Как синтаксис Razor работы:

Вы можете увидеть Бритва похож на скриптлета в веб-форме. Например, вы хотите получить Name из Human класса, в .cshtml файле, вы пишете:

<div>Name is @Model.Name</div> 

И в aspx, вы пишете:

<div>Name is <%= Human.Name %></div> 

Оба Razor и скриптлет будет обработан до возвращая файлы HTML клиенту.Следуйте в приведенном выше примере, если вы просмотрите исходный код веб-страницы HTML, вы увидите (Forte это просто пример):

<div>Name is Forte</div> 

Поскольку код был обработан, так, что клиент см является результатом HTML только.

2.Как клиенты взаимодействуют с сервером?

В веб-форме, когда вы хотите перейти на сервер (например, обрабатывать click событие кнопки), вы можете создать функцию для вызова с помощью набора OnClickListener для кнопки, и все это делается автоматически.

Однако в MVC.NET вы должны сделать это через вызов Ajax или поместить свою кнопку в <form>.

Если у вас есть какие-либо вопросы, не стесняйтесь, дайте мне знать :)

+0

Я предполагаю, что это один из моих зависаний, Razor позволяет обойти Ajax, делая больше javaScript-подобных вещей? Он возвращается на сервер еще для обработки, но страница понимает, что это не полная обратная передача, а просто выполняемые разделы кода C# (или что-то есть)? –

+0

Что вы имеете в виду в «JavaScript-подобных вещах»? Весь код Razor будет обрабатываться и превращаться в строку, а затем возвращаться к клиентам. Вот почему в '.cshtml' вы пишете:' 'и в' HTML'-источнике вы видите '' – AnhTriet

2

mvc запускает всю эту серверную часть и предоставляет клиенту полученное html/javascript поколение.

1

Допустим, у вас есть это в представлении

@{ var var1 = "Hello World"; } 
<p>The value of var1 is: @var1</p> 

Все происходит на сервере

Когда пользователь запрашивает эту страницу сервер получает текст выше, и посылает его на вид двигателя.

Затем сервер запускает текст по строкам и «компилирует» его.

Затем сервер snds результат обратно пользователю:

The value of var1 is: Hello World 

Если пользователь делает просмотреть исходный код, он будет видеть только:

<p>The value of myMessage is: Hello World</p> 

Таким образом, пользователь на клиенте пишет простой URL, и результат, который он получает, ТОЛЬКО линия выше.

0

По существу он компилирует представление, как и любой другой файл csharp/vb.net. Тем не менее, он делает это «на лету» (в первый раз, когда вы ударили его, и основной файл не изменился).

Если вы хотите посмотреть, как выглядит сгенерированный код, взгляните на https://github.com/RazorGenerator/RazorGenerator Это позволяет фактически генерировать тот же код, что и часть MSbuild, и развернуть его.

Смежные вопросы