Pergunta

Alguns textos sobre o estado ASP.NET MVC que "não há tags de servidor runat", mesmo este artigo MSDN diz isso, quando, logo acima essa declaração há um exemplo de código com uma marca de servidor runat no elemento HEAD:

E em conversas StackOverflow eu li

"O fato de que você deseja usar "runat = servidor" controles significa que você deve fazer um ASP.NET tradicional aplicação.

E, claro, na página Site.Master existem atributos de servidor runat nas ContentPlaceHolders.

A única coisa que eu vejo ausente do ASP.NET MVC em termos de servidor runat é o FORM runat onipresente = tag "server" em cada página .aspx / view.

Mas o que sobre o resto das tags do servidor runat em ASP.NET MVC, o que as pessoas querem dizer quando afirmam que o ASP.NET MVC não tem esses?

Foi útil?

Solução

Se você usar um runat = tag "server" em qualquer elemento, como um DIV que vai tornar esse código como um método separado na página compilada.

Se você está convertendo código 'legado' é uma boa idéia para remover todas as tags runat direita na frente de outra forma você acabar em uma situação onde um código como o seguinte dá-lhe um erro.

<% 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 irá falhar dizendo-lhe alguma loucura sobre 'cat' estar fora de alcance. Eventualmente, quando você olha para o código gerado completa você vai ver que o <div> foi gerado como todo o seu método próprio -. Que é, naturalmente, um escopo diferente, sem gatos em vista

Voltar para um segundo para o modelo padrão para uma aplicação MVC:

Você verá o modelo atual dá-lhe isto para o 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>

Isso me deixou imaginando - se estamos usando <% = sintaxe para escrever o título diretamente na tag title? - então por que precisamos torná-lo runat

Acontece como eu suspeitava que o codebehind para olhares head para um valor existente dentro da tag título (o que teria sido de saída aqui por <%= Html.Encode(ViewData["Title"]) %>. Se ele encontrar um (que será o caso para os todos os pontos de vista de amostra no MVC modelo), então não vai fazer mais nada se não existe nenhum título (se ViewData [ "title"] é nulo ou vazio) que será o padrão para o que está definido na sua opinião pelo 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" %>

Na minha página mestra eu teria removido a tag runat='server' - desde que eu não acho que nunca vai querer preencher o meu título de página de propriedade Title da vista. Mas eu estou adiando fazer isso pendente post prometido por Phil sobre o assunto -. No caso do servidor runat me dá nada de útil para o meu CSS e JS demasiado

Outras dicas

Eles não quero dizer que você não pode usar runat = "server", mas sim que ele não é necessário para os controles do lado do servidor utilizado, geralmente, no MVC. Se você achar que você precisa de um controle do lado do servidor e estão trabalhando com ele em code-behind que é e indicação de que a aplicação está tendendo em direção webforms. Todas as coisas que normalmente acontecem em seu código-behind shoulo agora ser tratado em seu controlador ou na própria lógica de exibição.

Basta ler neste tutorial:

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

que é necessário o

<head runat="server">

para ser capaz de definir facilmente o título da página em seus pontos de vista.

MVC é apenas uma camada em cima de webforms. Meus controles webforms personalizados também exigem a tag cabeça para ser serverside acessível para o registo script. Estes controles personalizados são prestados clientside e não usar eventos viewstate ou do lado do servidor. Por isso, eles também podem ser usados ??em MVC com o mecanismo de exibição ASPX.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top