Question

Certains textes sur ASP.NET MVC indiquent qu '"il n'y a pas de balises de serveur runat", même cet article MSDN l'indique lorsque, juste au-dessus de cette instruction, il existe un exemple de code avec une balise de serveur runat dans l'élément HEAD:

Et sur les conversations StackOverflow que j'ai lues

  

"Le fait que vous souhaitiez utiliser   " runat = server " contrôles signifie que vous   devrait faire un ASP.NET traditionnel   app.

Et bien sûr, dans la page Site.Master, il existe des attributs de serveur d'exécution dans ContentPlaceHolders.

La seule chose que je vois absente d'ASP.NET MVC en termes de serveur runat est l'omniprésent FORM runat = " serveur " balise sur chaque page / vue .aspx.

Mais qu'en est-il du reste des balises de serveur runat dans ASP.NET MVC, que veulent dire les gens lorsqu'ils disent qu'ASP.NET MVC ne les possède pas?

Était-ce utile?

La solution

Si vous utilisez un runat = " serveur " Si vous utilisez une balise sur n’importe quel élément, tel qu’un DIV, le code sera rendu sous forme de méthode distincte dans la page compilée.

Si vous convertissez du code "hérité", il est préférable de supprimer immédiatement tous les tags runat, sinon vous vous retrouvez dans une situation où un code tel que celui-ci génère une erreur.

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

Ce code ne vous dira pas qu'il est fou de voir que 'cat' est hors de portée. En fin de compte, lorsque vous regardez le code complet généré, vous verrez que le < div > a été généré comme sa propre méthode - ce qui est bien sûr une portée différente, sans chat en vue.

Retournez une seconde au modèle par défaut pour une application MVC:

Vous verrez que le modèle actuel vous donne ceci pour la tête :

<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>

Cela me laisse perplexe - si nous utilisons la syntaxe <% = pour écrire le titre directement dans la balise title - alors pourquoi aurions-nous besoin de le faire fonctionner?

Il se trouve que je soupçonnais que codebehind pour head recherche une valeur existante dans la balise de titre (qui aurait été sortie ici par <% = Html.Encode (ViewData [" Title "])% > . S'il en trouve une (ce qui sera le cas pour tous les exemples de vues du modèle MVC), elle ne fera rien d'autre. Si aucun titre n'existe (si ViewData [" Title "] est null ou vide) la valeur par défaut de l'attribut Title est définie dans votre vue:

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

Dans ma page maître, j'aurais supprimé la balise runat = 'serveur' - car je ne pense pas que je voudrai jamais renseigner le titre de ma page à partir du Titre propriété. Mais je me retiens de faire ceci en attendant le blog promis par Phil sur le sujet - au cas où le serveur runat me donnerait quelque chose d’utile pour mes CSS et JS aussi.

Autres conseils

Cela ne veut pas dire que vous ne pouvez pas utiliser runat = "serveur", mais qu'il n'est pas nécessaire d'utiliser des contrôles côté serveur, généralement dans MVC. Si vous constatez que vous avez besoin d'un contrôle côté serveur et que vous l'utilisez dans un code-behind, c'est l'indication que l'application tend vers les formulaires Web. Tout ce qui se passerait normalement dans votre code-behind devrait maintenant être traité dans votre contrôleur ou dans la logique de vue elle-même.

Il suffit de lire dans ce tutoriel:

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

que vous avez besoin du

<head runat="server">

pour pouvoir définir facilement le titre de la page dans vos vues.

MVC est simplement une couche au-dessus des formulaires Web. Mes contrôles de formulaires Web personnalisés exigent également que la balise head soit accessible sur le serveur pour l'enregistrement du script. Ces contrôles personnalisés sont rendus côté client et n'utilisent pas d'événements Viewstate ou serveride. De ce fait, ils peuvent également être utilisés dans MVC avec le moteur de vue ASPX.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top