¿Cuál es el estado de runat = & # 8220; servidor & # 8221; etiquetas en ASP.NET MVC?

StackOverflow https://stackoverflow.com/questions/446533

  •  22-07-2019
  •  | 
  •  

Pregunta

Algunos textos en ASP.NET MVC afirman que "no hay etiquetas de servidor runat", incluso este artículo de MSDN dice esto, cuando, justo encima de esa declaración, hay un ejemplo de código con una etiqueta de servidor runat en el elemento HEAD:

Y en las conversaciones de StackOverflow que leo

  

" El hecho de que quieres usar   " runat = servidor " controles significa que usted   debería estar haciendo un ASP.NET tradicional   aplicación.

Y, por supuesto, en la página Site.Master hay atributos de servidor runat en ContentPlaceHolders.

Lo único que veo ausente de ASP.NET MVC en términos de servidor runat es la omnipresente FORM runat = " server " etiqueta en cada página / vista .aspx.

Pero, ¿qué pasa con el resto de las etiquetas del servidor runat en ASP.NET MVC, qué quieren decir las personas cuando dicen que ASP.NET MVC no las tiene?

¿Fue útil?

Solución

Si usa un servidor runat = " " etiqueta en CUALQUIER elemento, como un DIV, representará ese 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 de runat por adelantado, 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 fallará diciéndole cierta locura acerca de que 'cat' está fuera de alcance. Eventualmente, cuando miras el código generado completo, verás que < div > se ha generado como su propio método, lo que, por supuesto, es un alcance diferente sin gatos a la vista.

Regrese por un segundo a la plantilla predeterminada para una aplicación MVC:

Verá que la plantilla actual le proporciona esto para el 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 dejó preguntándome: si estamos usando la sintaxis <% = para escribir el título directamente en la etiqueta title , entonces ¿por qué tendríamos que hacerlo funcionar?

Resulta que sospeché que el código detrás de head busca un valor existente dentro de la etiqueta de título (que habría sido generado aquí por <% = Html.Encode (ViewData [" Título "])% > . Si encuentra uno (que será el caso para todas las vistas de muestra en la plantilla MVC), entonces no hará nada más. Si no existe ningún título (si ViewData [" Título "] es nulo o está vacío) se establecerá de forma predeterminada en lo que sea definido en su 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 rellenar el título de mi página desde el Título propiedad. Pero me estoy retrasando de hacer esto pendiente de la publicación de blog prometida de Phil sobre el tema, en caso de que el servidor runat también me dé algo útil para mi CSS y JS.

Otros consejos

No significan que no pueda usar runat = " server " ;, sino que no es necesario usar controles del lado del servidor, generalmente, en MVC. Si encuentra que necesita un control del lado del servidor y está trabajando con él en código subyacente, eso es una indicación de que la aplicación está tendiendo hacia los formularios web. Todas las cosas que normalmente sucederían en su código detrás de shoulo ahora se manejan en su controlador o en la lógica de vista misma.

Acabo de leer en este tutorial:

http://www.asp.net/learn/mvc /tutorial-12-cs.aspx

que necesitas el

<head runat="server">

para poder definir fácilmente el título de la página en sus vistas.

MVC es solo una capa en la parte superior de los formularios web. Mis controles de formularios web personalizados también requieren que la etiqueta del encabezado sea accesible desde el servidor para el registro del script. Estos controles personalizados se representan en el lado del cliente y no usan eventos de estado de vista o de servidor. Debido a esto, también se pueden usar en MVC con el motor de vista ASPX.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top