ASP.NET MVC中runat ="server"标签的状态是什么?

Edw*_*uay 18 .net asp.net-mvc runatserver

ASP.NET MVC上的一些文本声明"没有runat服务器标签",即使这篇MSDN文章也说过,在该语句的正上方,在HEAD元素中有一个带有runat服务器标签的代码示例:

在我读过的StackOverflow对话中

"你想使用"runat = server"控件的事实意味着你应该做一个传统的ASP.NET应用程序.

当然,在Site.Master页面中,ContentPlaceHolders中有runat服务器属性.

在runat服务器方面我唯一看不到ASP.NET MVC的是每个.aspx页面/视图上普遍存在的FORM runat ="server"标签.

但是,ASP.NET MVC中的其余runat服务器标签怎么样呢?当人们说ASP.NET MVC没有这些时,人们的意思是什么?

Sim*_*ver 7

如果在任何元素(例如DIV)上使用runat ="server"标记,它将在编译页面中将该代码呈现为单独的方法.

如果您要转换"遗留"代码,最好立即删除所有runat标记,否则最终会出现以下代码导致错误的情况.

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

这段代码无法告诉你一些'cat'超出范围的疯狂.最后,当你查看完整生成的代码时,你会发现它<div>已经被生成为它自己的整个方法 - 这当然是一个不同的范围,看不到猫.

返回MVC应用程序的默认模板:

您将看到当前模板为您提供以下内容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>
Run Code Online (Sandbox Code Playgroud)

这让我想知道 - 如果我们使用<%=语法将标题直接写入title标签 - 那么为什么我们需要让它运行?

事实证明,我怀疑代码隐藏head在标题标记内部查找现有值(这里可以输出<%= Html.Encode(ViewData["Title"]) %>.如果找到一个(MVC模板中的所有样本视图都是这种情况)那么它如果没有标题(如果ViewData ["Title"]为空或空),它将默认为Title属性在视图中定义的任何内容:

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

在我的母版页中,我会删除runat='server'标记 - 因为我不认为我会想要从视图的Title属性填充我的页面标题.但是我暂时没有做好这个有关这个主题的Phil的承诺博客文章 - 如果runat服务器给了我任何对我的CSS和JS有用的东西.