Domanda

Alcuni testi su ASP.NET MVC affermano che "non ci sono tag del server runat", anche questo articolo MSDN dice questo, quando, proprio sopra quell'istruzione c'è un esempio di codice con un tag server runat nell'elemento HEAD:

E sulle conversazioni StackOverflow ho letto

  

" Il fatto che desideri utilizzare   & Quot; runat = server di " controlli significa che tu   dovrebbe fare un ASP.NET tradizionale   app.

E ovviamente nella pagina Site.Master ci sono gli attributi del server runat in ContentPlaceHolders.

L'unica cosa che vedo assente da ASP.NET MVC in termini di server runat è l'onnipresente FORM runat = " server " tag su ogni pagina / vista aspx.

Ma per quanto riguarda il resto dei tag del server runat in ASP.NET MVC, cosa significano le persone quando affermano che ASP.NET MVC non li possiede?

È stato utile?

Soluzione

Se usi un runat = " server " tag su QUALSIASI elemento, come un DIV, renderà quel codice come metodo separato nella pagina compilata.

Se stai convertendo il codice 'legacy', è una buona idea rimuovere tutti i tag runat in primo piano, altrimenti finirai in una situazione in cui codice come il seguente ti dà un errore.

<% foreach (var cat in cats) { %>
    <div runat="server">
         <span class="name"> <%= cat.name %> </span> is a
         <span class="breed"> <%= cat.breed %> </span>
    </div>
 <% } %>

Questo codice non ti dirà un po 'di follia sul fatto che ' cat ' non rientra nell'ambito. Alla fine, quando guardi il codice completo generato, vedrai che < div > è stato generato come un metodo tutto suo, che ovviamente è un ambito diverso senza che i gatti siano in vista.

Torna per un secondo al modello predefinito per un'applicazione MVC:

Vedrai che il modello attuale ti fornisce questo per 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>

Questo mi ha fatto pensare: se stiamo usando la sintassi <% = per scrivere il titolo direttamente nel tag title - allora perché dovremmo renderlo runat?

Si scopre come sospettavo che il codebehind per head cerchi un valore esistente all'interno del tag title (che sarebbe stato prodotto qui da <% = Html.Encode (ViewData [" Title "])% > . Se ne trova uno (che sarà il caso di tutte le viste di esempio nel modello MVC), non farà più nulla. Se non esiste alcun titolo (se ViewData [" Title "] è nullo o vuoto) verrà impostato automaticamente su qualsiasi valore definito nella vista dall'attributo Title :

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/RRMaster.Master" 
Title="View Products" AutoEventWireup="true" CodeBehind="ViewProduct.aspx.cs"
Inherits="RR_MVC.Views.Products.ViewProduct" %>

Nella mia pagina principale avrei rimosso il tag runat = 'server' - poiché non credo che vorrò mai popolare il titolo della mia pagina dal Title proprietà. Ma mi sto trattenendo dal fare questo post sul blog promesso da Phil sull'argomento, nel caso in cui il server runat mi dia qualcosa di utile anche per il mio CSS e JS.

Altri suggerimenti

Non significano che non puoi usare runat = " server " ;, ma piuttosto che non è necessario usare i controlli lato server, generalmente, in MVC. Se trovi che hai bisogno di un controllo sul lato server e stai lavorando con esso in code-behind, ciò indica che l'applicazione sta tendendo indietro verso i moduli web. Tutte le cose che normalmente accaderebbero nello shoulo code-behind ora vengono gestite nel controller o nella logica di visualizzazione stessa.

Basta leggere in questo tutorial:

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

che ti serve

<head runat="server">

per poter definire facilmente il titolo della pagina nelle tue visualizzazioni.

MVC è solo uno strato sopra i moduli web. I miei controlli di moduli web personalizzati richiedono anche che il tag head sia accessibile sul lato server per la registrazione degli script. Questi controlli personalizzati vengono resi sul lato client e non utilizzano eventi viewstate o lato server. Per questo motivo possono essere utilizzati anche in MVC con il motore di visualizzazione ASPX.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top