Razor構文

2018/08/04
工事中です…

HTMLとC#間の切り替え

<!-- ファイルのデフォルトはHTML。 -->
<div></div>
@{
    // コード(C#/VB)を書くときは@{}(コードブロック)の中へ。
    // コードブロック内の記述はHTMLにレンダリングされない。
}
<!-- 制御構造はコードブロックの一種(拡張)。(更にブロックで囲む必要は無い) -->
@if (){
  ....
}

@foreach(var item in items){
  // コードブロック内なのでここではifの前に@は不要
 // 実際のコードではLINQでitemsを絞り込むのでこんな使い方はしないでしょうが… 
  if (!item.Discontinued){
    // コードブロック内にいきなりタグを書くことができる
    // HTMLとしてレンダリングされるようになる
    <div>
      <!-- HTML内にコードを書く時は@を付けてC#(Razor式)に移行 -->
      <!-- {}で囲まないRazor式はコードブロックと異なりレンダリングされる -->
      <div>@item.Name</div>
      <div>@item.Price円</div><!-- エラー。Price円が見つからない -->
      <div>@item.Price 円</div><!-- 半角スペースを入れると大丈夫 -->
      <div>@item.Price<span>円</span></div><!-- どちらかをタグで囲むか -->
      <div>@(item.Price)円</div><!-- ()を使って明示的なRazor式に -->
      <div>@(item.Price - 100)円</div><!-- こんな時も()を付けて明示的に -->
    </div>
    <!-- タグで囲む必要は無いけれど、レンダリングしたい時は<text>タグで囲む -->
    <text>@item.Note</text>
  }
}

@using(Html.BeginForm()){
   <input type="submit">
}

エスケープ

@ITのように@マークを表示したい場合は@@というように@マークを2つ続けると1つだけ表示されます。
ただしhoge@sample.jpのようにメールアドレスのパターンにマッチする場合はエスケープ不要です。

Model

予約語

Razorの予約語pageASP.NET Core 2.0以降
namespace
functions
inherits
inject@injectビューに依存性の注入を行う
model@model
section@sectionlayoutビューとの紐付けに利用
helper
C#の予約語case
do
default
for
foreach
if
case
lock
switch
try
catch
finally
using
while
class

リンク

ASP.NET Core2.1razor
OK キャンセル 確認 その他