By Abhishek Jaiswal :) on Mar 21, 2015
In this article we learn about Razor Engine Syntax vs Web Form in MVC ASP.NET.

Quick View

This article is all about the Razor Engine Syntax and traditional Web form explanations. I'll try to compare and differentiate between both using few parameters and some coding convention examples.

The following image says it all, but I'll try to explain all this in words and some code syntaxes.

So let's see what I have for you guys in this article. Here are some parameters based on which I'll compare both of the two.

Implicit Code Expression

Code expressions are generally evaluated and written to the response.

Code expressions in the Razor Engine are always HTML encoded but on the other hand in Web Forms the syntax automatically encodes the value.

In the following table I'll show how yu typically display a value in a view.

Let's have a look:

Razor <span>@model.Message</span>
Web Form <span><%: model.Message %></span>

Explicit Code Expression

In an explicit code expression, code expressions are evaluated and written to the response. In the following table I'll show how you typically would display a value in a view.

Let's have a look:

Razor <span>SSN@ (ssn)</span>
Web From <span>SSN<%: ssn %></span>

Encoded Code Expression

Let's have a close look at this definition:

"HTML encoded values are done by Encoded Code Expression."

Razor <span>@RazorViewEngine</span>
Web Form <span><%: RazorEngineView %></span>

Un-encoded Code Expression

Let's have a close look at this definition:

"Un-Encoded Code Expression is used for rendering un-encoded values."

In various cases we need to explicitly render some values that should not be HTML encoded. For that we need to use the Html.Raw method to ensure that the value is not encoded as determined. For this unencoded code expression with the Html.Raw method comes into the action.

Let's have a look at code expression:

Razor <span>@Html.Raw(model.Message)</span>
Web Form <span><%: Html.Raw(model.Message)%></span>

Code Block/Segment

Before going any further let's have a close look at the code block:

"Unlike code expressions, code blocks/segment are simply sections of code that are executed (evaluated and output to the response)."

  • They are useful for declaring variable that you may need to use later.
  • They are set of several code expressions.
  • Evaluated one by one.

Let's have a look at code expression:

Razor @{ 
int A = 5;
string C = "CSharpCorner.";
}
Web Form <%
int A = 5;
string C = "CSharpCorner.";
%>

Combining Text and Markup

This segment of article represents what an intermixing of text and markup looks like using both a Razor Engine and Web Form.

Let's have a look at code expression:

Razor @foreach (var item in items){
<span>Item @item.Name </span>
}
Web Form <% foreach (var item in items){ %>
<span>Item <%: item.Name %></span>
<% } %>

Mixing Code and Plain Text

The Razor Engine always looks for the beginning of the tag to determine when to transition from code to markup but we often get some situations where we want to output the plain text immediately after a code block. Say, displaying some plain text within a conditional block.

Let's have a look at code expressions:

Razor @if (showMessage)
{
<h1>@ViewBag.Message</h1>
}
Web Form <% if (showMessage)
{ %>
<h1><% : ViewBag.Message %></h1>
<% } %>

Server-side Comment

Let's have a close look at this definition:

"Server-side Comment syntax allows you to completely disable content/code/controls within a page."

  • Helps in preventing the browser from parsing/running/displaying the HTML content within it.
  • Server-side comments executes on the server.
  • You can do server-side comments in both ways, either with the Razor Engine or with Web Forms.
Razor @*
Its Multiline server-side comment.
@if (showMessage)
{
<h1>@ViewBag.Message</h1> 
}
This comment will be end here..
*@
Web Form <%--
Its Multiline server-side comment.
<% if (showMessage)
{ %>
<h1><% : ViewBag.Message %></h1>
<% } %>
This comment will be end here..
--%>

Escaping the Code Delimiter

Delimiter

Before going any further let's have a look at some important keywords:

"A delimiter is a sequence of one or more characters used to specify the boundaries between separate, independent regions in plain text or other data streams."

An example of a delimiter is a "Comma"

  • A delimiter specifies boundaries in the data stream, declaration notation.
  • Delimiters can be broken down into Field-Record and Bracket Delimiter.
  • Caused Delimiter Collision.

Escaping Delimiter

Now I'll explain what a delimiter is escaping.

Delimiter collision is a problem that occurs when a programmer introduces delimiters into code without actually intending them to be interpreted as boundaries between separate regions.

The following are methods that can be used for avoiding Delimiter collision:

  • Escaping Character
  • Escaping Sequence
  • Dual Quoting Delimiter
  • Padding Quoting Delimiter
  • Multiple Quoting Delimiter
Razor My Twitter Handle is @jabhij
(or you can write it as:)
My Twitter Handle is @@jabhij
Web Form &lt;% Expression %&gt; as you like it

Calling a Generic Method

Generic method

Before going any further let's have a look at its definition:

"A Generic Method is a method that is declared with type parameters."

  • A generic method can be overloaded on several type parameters.
  • Within a generic class several non-generic methods can access several class level type parameters.
  • Constraints can be used to enable more specialized operations on type parameters in methods.
Razor @(Html.MyMethod<AType>())
Web Form <%: Html.MyMethod<AType> () %>

Points to Remember

The following are some important points that one needs to remember.

Razor Engine View

  • Introduced with MVC 3.0
  • Not a new language. It's a new "Markup Syntax"
  • Supports Test Driven Dev (TDD)
  • Has new advanced syntax that is compact, expressive and reduces typing
  • Easy to learn and clean in compression to "Web Forms"
  • Prevents Cross Site Scripting (XSS) attacks
  • Has different file extensions.
  • Doesn't support design mode.

Web Form Engine

  • Introduced with MVC 1.0
  • Doesn't support Test Driven Dev (TDD)
  • System.Web.UI.Page Namespace is used in it for testing (but still it makes the testing complex)
  • A bit faster in comparison to Razor
  • Does not prevent from Cross Site Scripting (XSS) attacks

Summary

I hope this was helpful.

A few tips from my side is that, if you guys really want to become familiar with MVC then:

  • Take your time
  • Do as much practise as you can (Implementation)
  • Try to "Learn" things, don't just "Study" (I mean it)
  • Try to discuss things with friends, colleagues or in forums (C# Corner)
  • If you experience any problem, then your queries are welcome.

I hope you guys enjoyed this.

Terminologies in MVC: Part 2 (Razor Engine Syntax vs Web Form)的更多相关文章

  1. 添加asp.net mvc到现有的asp.net web form 应用程序

    前言 asp.net mvc的前一版本为asp.net web Form(Asp.net mvc之前称为asp.net),其第一个版本与2002年年初发布.asp.net web form 属于.ne ...

  2. ASP.NET MVC 3 and the @helper syntax within Razor

    Friday, May 13, 2011 ASP.NET MVC 3 supports a new view-engine option called “Razor” (in addition to ...

  3. Razor Engine,实现代码生成器的又一件利器

    Razor Engine,之前仅仅是ASP.NET MVC的一种View引擎,目前已经完全成为一种可以独立使用的模版引擎,并且已经成为了CodePlex上一个开源的项目(http://razoreng ...

  4. [2018-08-25]模板引擎Razor Engine 用法示例

    好久没写博客了,回宁波后最近几个月一直忙些线下的事情. 敲代码方面脱产有阵子了,生疏了,回头一看,这行业果然更新飞快. 最近线下的事情基本忙完,准备开始干回老本行,最重要的一件事就是升级abplus库 ...

  5. 转发-基于ASP.NET MVC 4/5 Razor的模块化/插件式架构实现

    基于ASP.NET MVC 4/5 Razor的模块化/插件式架构实现   概述 在日常开发中, 我们经常谈起模块化/插件化架构,这样可既可以提高开效率,又可以实现良好的扩展性,尤其对于产品化的系统有 ...

  6. (转)Asp.Net Mvc视图引擎Razor介绍

    Asp.Net Mvc视图引擎Razor介绍 1.Razor介绍 程序园原创,转载请注明:http://www.kwstu.com/ArticleView/dabaomvc_2014082408205 ...

  7. asp.net mvc webform和razor的page基类区别

    接触过asp.net mvc的都知道,在传统的webform的模式下,page页面的基类是这样声明的: <%@ Page Language="C#" MasterPageFi ...

  8. Web Form 和asp.net mvc 差别

    Asp.net MVC 和web Form的基本区别 Web Form ASP.NET MVC 视图和逻辑紧密耦合 视图和逻辑分离 页面(给予文件的URL) 控制器(基于路由的URL) 状态管理(视图 ...

  9. web form中自定义HttpHandler仿mvc

    web form中自定义HttpHandler仿mvc 前言 在mvc大行其道的今天,仍然有不少公司的项目还是使用web form来实现的(其实mvc也是基于web form的),如果要在项目中引入m ...

随机推荐

  1. Android 比对APK的签名信息

    https://www.jianshu.com/p/8583f6a966e2 在做App的时候经常会有验证apk是否为正版的需求,比如一些接入第三方支付的app,接入微信sdk也是需要apk签名信息的 ...

  2. #51单片机#超声波测距(HC-SR04)的使用方法

    #51单片机#超声波测距(HC-SR04)的使用方法

  3. 编程实现从hadoop上下载

    下载 package hadoopTest; import java.io.File; import java.io.IOException; import org.apache.hadoop.con ...

  4. 几个ssh和sftp的命令

    sudo apt-get install openssh-server 装server sudo /etc/init.d/ssh stop sudo /etc/init.d/ssh start sud ...

  5. CAN总线应用

    CAN总线的应用 1.汽车制造中的应用 应用CAN总线,可以减少车身布线,进一步节省了成本,由于采用总线技术,模块之间的信号传递仅需要两条信号线.布线局部化,车上除掉总线外其他所有横贯车身的线都不再需 ...

  6. 蓝桥杯 算法训练 ALGO-34 纪念品分组

    算法训练 纪念品分组   时间限制:1.0s   内存限制:256.0MB 问题描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得的纪念品价值 相对均衡,他要把购 ...

  7. PTA 银行排队问题之单队列多窗口服务(25 分)

    银行排队问题之单队列多窗口服务(25 分) 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙.当有窗口空闲时,下一位顾客即去该窗口处理事务.当有多个窗口可选择时,假 ...

  8. Oracle 11g r2 rac +openfiler 2.99 安装

    1 openfiler 2.99 安装 在官网下载iso文件,这里选择openfileresa-2.99.1-x86_64-disc1.iso 版本,在vbox下创建一个虚拟机 --vbox 选择li ...

  9. oracle创建表空间、创建用户

    create user user_name identified by user_name create temporary tablespace user_name_temp tempfile '/ ...

  10. Python多线程-队列

    队列就是存东西取东西,多用于多线程中 按照顺序 对传入的数据按规定的顺序输出 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" ...