Frage

Einige Texte auf ASP.NET MVC fest, dass „es gibt keine Runat Server-Tags“, auch dieser MSDN-Artikel sagt dies, wenn, direkt über dieser Aussage gibt es ein Codebeispiel mit einem Runat Server-Tag in dem Element HEAD:

Und auf Stackoverflow Gespräche, die ich lesen

  

"Die Tatsache, dass Sie verwenden möchten   „Runat = server“ Kontrollen bedeutet, dass Sie   sollte ein traditionelles ASP.NET tun   App.

Und natürlich in der Site.Master Seite gibt es Runat Server in den Contentplaceholders Attribut.

Das einzige, was ich von ASP.NET MVC in Bezug auf Runat Server abwesend sehen, ist die allgegenwärtige FORM runat = "server" Tag auf jeder ASPX-Seite / Ansicht.

Aber was ist mit dem Rest der Runat Server-Tags in ASP.NET MVC, was die Leute meinen sie, wenn sie sagen, dass ASP.NET MVC nicht über diese?

War es hilfreich?

Lösung

Wenn Sie ein runat = "server" -Tag auf ein beliebiges Element, wie ein DIV verwenden wird es diesen Code als separates Methode machen in der kompilierten Seite.

Wenn Sie konvertieren ‚Legacy‘ Code ist es eine gute Idee, alle runat-Tags zu entfernen rechts vorne sonst enden Sie in einer Situation, wo Code wie folgt aus Sie einen Fehler gibt.

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

Dieser Code wird fehlschlagen Sie einige Verrücktheit zu erzählen 'cat' den Gültigkeitsbereich zu sein. Schließlich, wenn Sie an dem vollständigen generierten Code sehen Sie werden sehen, dass der <div> als seine ganze eigene Methode erzeugt wurde -. Was natürlich eine andere Tragweite ohne Katzen in Sicht

Zurück für eine Sekunde auf die Standardvorlage für eine MVC-Anwendung:

Sie werden die aktuelle Vorlage sehen gibt Ihnen diese für die 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>

Dies läßt mich fragen - wenn wir mit <% = Syntax, um den Titel direkt in den title-Tag zu schreiben - warum dann würden wir es runat machen müssen

?

Es stellt sich heraus, wie ich vermutete, dass die Code-Behind für head für einen vorhandenen Wert in der Titel-Tag sieht (die Ausgabe von <%= Html.Encode(ViewData["Title"]) %> hier gewesen wäre. Wenn es einen findet (was der Fall für die alle Musteransichten in der sein MVC-Vorlage), dann wird es tut nichts weiter, wenn kein Titel vorhanden ist (wenn Viewdata [ „Titel“] ist null oder leer) es wird standardmäßig zu, was auch immer in Ihrer Ansicht nach durch das Title Attribut definiert ist.

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

In meiner Masterseite würde ich den runat='server' Tag entfernt haben - da ich glaube nicht, dass ich jemals meine Seitentitel aus der Sicht der Title Eigenschaft auffüllen möge. Aber ich halte aus, dies zu tun anhängige Phils versprochen Blog-Post über das Thema - im Falle der Runat Server gibt mir etwas Sinnvolles für meine CSS und JS zu

.

Andere Tipps

Sie bedeuten nicht, dass Sie nicht runat = „server“, sondern vielmehr, dass es nicht notwendig, zu verwenden serverseitige Kontrollen, in der Regel, in MVC verwenden können. Wenn Sie feststellen, dass Sie eine serverseitige Steuerung benötigen und arbeiten mit ihm in Code-behind das ist und Hinweis darauf, dass die Anwendung zurück in Richtung webforms neigt. All die Dinge, die normalerweise in Ihrem Code-behind jetzt in Ihrem Controller oder in der Ansicht Logik behandelt werden shoulo passieren würde selbst.

Just in diesem Tutorial lesen:

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

, die Sie benötigen, die

<head runat="server">

in der Lage sein, um bequem den Seitentitel in Ihre Ansichten zu definieren.

MVC ist nur eine Schicht oben auf Webformulare. Meine benutzerdefinierte Webformulare Kontrollen erfordern auch die Head-Tag zugänglich server für Script-Registrierung zu sein. Diese benutzerdefinierten Kontrollen gemacht werden client und nicht Ansichtszustand oder serverseitige Ereignisse verwenden. Aus diesem Grunde können sie auch in MVC mit dem ASPX-Ansicht-Engine verwendet werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top