Если вы используете тег runat = "server" для ЛЮБОГО элемента, такого как DIV, он будет отображать этот код как отдельный метод на скомпилированной странице.
Если вы конвертируете «устаревший» код, хорошей идеей будет удалить все теги 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>
Это заставило меня задуматься - если мы используем синтаксис <% = для записи заголовка непосредственно в тег <code>title - тогда зачем нам делать его runat?
Оказывается, я подозревал, что код для head
ищет существующее значение внутри тега заголовка (которое было бы выведено здесь <%= Html.Encode(ViewData["Title"]) %>
. Если оно найдет его (что будет иметь место для всех примеры представлений в шаблоне MVC), тогда он больше ничего не будет делать. Если заголовок не существует (если ViewData ["Title"] является нулевым или пустым), он по умолчанию будет соответствовать тому, что определено в вашем виде атрибутом 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
представления. Но я воздерживаюсь от этого обещанного поста Фила в блоге на эту тему - на случай, если сервер runat даст мне что-нибудь полезное для моих CSS и JS.