WebFormViewEngine käyttää näkymiin .aspx- ja .ascx-tiedostoja sekä perinteisestä ASP.NET:stä tuttua syntaksia eli html:ää, jonka seassa on  <% ... %> -tägejä, joilla erotellaan C#-koodi. Esimerkiksi /Views/Home/Index.aspx -tiedosto

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" >

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Home Page
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2><%: View.Message %></h2>
    <p>
        To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
    </p>
</asp:Content>

aspx:n ja ascx:n ero on se, että aspx:ää käytetään yleensä sivuna (esim. blogisivu) ja ascx:ää uudelleenkäytettävänä sivun osana (esim. blogin merkinnät, joita tulee sivulle monta kappaletta).

Syntaksi

C#-koodi erotellaan <% ... %> -tägeillä.

Arvo voidaan tulostaa html:n sekaan sellaisenaan seuraavasti

<p>
<%=olio.Tieto %>
</p>

Jos arvon haluaa html-enkoodata (eli näyttää tägit tekstinä, < muuttuu < jne. ), on siihen syntaksi

<h2><%:olio.Tieto %></h2>

C#-koodissa voi tehdä sellasia rakenteita kuin haluaa

<ul>
<% 	foreach(var olio in Model)
	{ %>
	<li><a href="/oliot/<%=olio.Id %>/tiedot/"><%=olio.Nimi %></a></li>
<% 	} %>
</ul>

Kannattaa muistaa, että HtmlHelper tarjoaa apumetodeita html:n muodostamiseen, jolloin vältetään osa tuollaisesta tägisotkusta.

Käytettävän tiedoston etsiminen

WebFormViewEngine etsii näkymän tiedoston seuraavassa järjestyksessä Käytettävän tiedoston voi määritellä myös antamalla suoraan sen polun
public class JokuController : Controller
{
	public ActionResult Index()
	{
		// tee jotain
		// palauta näkymä
		return View("~/Themes/Default/Views/Index.aspx");
	}
}

MasterPage

Sivuille (eli aspx-tiedostoille) voi määritellä sivupohjan (eli MasterPagen), johon voi laittaa sivuille yhteiset tiedot, jolloin niitä ei tarvitse kopioida jokaiselle sivulle erikseen. Näitä tietoja voivat olla esim. yleinen asettelu, tyylimäärittelyt, valikot ja sivupalkit. MasterPage löytyy Visual Studion Add New Item-valikosta nimellä MVC x View Master Page (x:n ollessa mvc:n versio).

MasterPagen koodi alkaa seuraavan tyyppisellä rivillä

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>

Loput koodista voikin olla mitä tahansa html:stä, <% ... %> ja <asp: />-tägeistä koostuvaa.

Sivu saadaan käyttämään tiettyä MasterPagea, kun sen alussa olevalla rivillä on määritelty MasterPageFile-arvo

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

ContentPlaceHolder

Koska useat eri sivut voivat käyttää samaa MasterPagea, täytynee olla jokin tapa miten sivukohtaiset tiedot saadaan näytettyä. ContentPlaceHolder on juuri sellainen. MasterPageen voidaan lisätä tällaisia "paikanpitäjiä" sivukohtaisille tiedoille

xml<asp:ContentPlaceHolder ID="MainContent" runat="server" />

Noita voi olla useita ja kullakin tulee olla yksilöllinen ID-arvo. Sivuilla noiden paikalle sijoitetaan muuttuvia tietoja Content-tägillä

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">;
    <p>
        Sivukohtaista tietoa...
    </p>
</asp:Content>

Se minkä paikanpitäjän tilalle tiedot menevät määräytyvät tuon ContentPlaceHolderID-tiedon perusteella.