Si utiliza una etiqueta runat = "server" en cualquier elemento, como un DIV que dejará sin efecto dicha código como un método separado en la página compilada.
Si está convirtiendo código 'heredado', es una buena idea eliminar todas las etiquetas runat desde el principio, de lo contrario terminará en una situación en la que un código como el siguiente le da un error.
<% foreach (var cat in cats) { %>
<div runat="server">
<span class="name"> <%= cat.name %> </span> is a
<span class="breed"> <%= cat.breed %> </span>
</div>
<% } %>
Este código se producirá un error que le dice algo de la locura sobre 'cat'
estar fuera de alcance. Eventualmente, cuando mires el código completo generado, verás que el <div>
se ha generado como su propio método completo, que es, por supuesto, un alcance diferente sin gatos a la vista.
Volver para una segunda a la plantilla predeterminada para una aplicación MVC:
Verá la plantilla actual que esto da para la 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>
Esto me pregunto - si está usando <% = sintaxis para escribir el título directamente en la etiqueta title
- entonces ¿por qué tendríamos que hacerlo runat?
Resulta como sospechaba que el código subyacente para head
busca un valor existente dentro de la etiqueta del título (que habría sido la salida aquí por <%= Html.Encode(ViewData["Title"]) %>
. Si encuentra uno (que será el caso para los todos los puntos de vista de muestra en la plantilla MVC) entonces no va a hacer nada más Si no existe ningún título (si ViewData [ "título"] es nulo o vacío) se pondrá por defecto a lo que se define en la vista por el atributo Title
:.
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/RRMaster.Master"
Title="View Products" AutoEventWireup="true" CodeBehind="ViewProduct.aspx.cs"
Inherits="RR_MVC.Views.Products.ViewProduct" %>
En mi página maestra, habría eliminado la etiqueta runat='server'
, ya que no creo que alguna vez quiera completar el título de mi página desde la vista Title
propiedad. Pero me estoy retrasando haciendo esto pendiente de la publicación de blog prometida de Phil sobre el tema, en caso de que el servidor runat me brinde algo útil también para mi CSS y JS.
Hmm, ¿por qué cuando creo una página maestra MVC View por defecto tiene tres servidores runat? Parecería que si estos no son constructos típicos de MVC, al menos los valores predeterminados del código no los tendrían. –
Sigue utilizando el motor de representación ASP y ContentPlaceHolders es la forma de construir páginas maestras en ASP.NET. Tenga en cuenta que la clave es "si se encuentra trabajando con código subyacente": los marcadores de posición en MVC no se direccionan en el código subyacente. – tvanfosson