DIVなどの任意の要素でrunat="server"タグを使用すると、コンパイルされたページでそのコードが別のメソッドとしてレンダリングされます。
「レガシー」コードを変換する場合は、すべてのrunatタグを前もって削除することをお勧めします。そうしないと、次のようなコードでエラーが発生することになります。
<% foreach (var cat in cats) { %>
<div runat="server">
<span class="name"> <%= cat.name %> </span> is a
<span class="breed"> <%= cat.breed %> </span>
</div>
<% } %>
'cat'
このコードは、範囲外であることについてのいくつかの狂気をあなたに伝えるのに失敗します。最終的に、完全に生成されたコードを見ると、<div>
が独自のメソッドとして生成されていることがわかります。これはもちろん、猫が見えない別のスコープです。
MVCアプリケーションのデフォルトテンプレートに少し戻ります。
あなたは現在のテンプレートがあなたにこれを与えるのを見るでしょうhead
:
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><%= Html.Encode(ViewData["Title"]) %></title>
<link href="../../Content/Site.css" rel="stylesheet" type="text/css" />
</head>
これにより、タイトルをタグに直接書き込むために<%=構文を使用している場合title
、なぜそれをrunatにする必要があるのでしょうか。
head
コードビハインドがタイトルタグ内の既存の値(ここで出力されたはずです)を探しているのではないかと思ったのですが、<%= Html.Encode(ViewData["Title"]) %>
見つかった場合(MVCテンプレートのすべてのサンプルビューに当てはまります)、タイトルが存在しない場合(ViewData ["Title"]がnullまたは空の場合)、デフォルトで、Title
属性によってビューで定義されているものになります。
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/RRMaster.Master"
Title="View Products" AutoEventWireup="true" CodeBehind="ViewProduct.aspx.cs"
Inherits="RR_MVC.Views.Products.ViewProduct" %>
私のマスターページでは、タグを削除していました-ビューのプロパティrunat='server'
からページタイトルを入力したいとは思わないので。Title
しかし、私はこの件についてのPhilの約束されたブログ投稿を保留しています-runatサーバーが私のCSSとJSにも役立つものを私に提供する場合に備えて。