首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET MVC中runat="server“标签的状态是什么?

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

Stack Overflow用户
提问于 2009-01-15 12:24:39
回答 4查看 18K关注 0票数 18

MSDN上的一些文本指出“没有runat服务器标签”,甚至这篇ASP.NET文章也是这样说的,因为在该语句的正上方有一个在HEAD元素中带有runat服务器标签的代码示例:

在我读到的StackOverflow对话中

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

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

在运行服务器方面,我在ASP.NET MVC中看到的唯一缺失的是每个.aspx页面/视图上普遍存在的表单服务器“runat=”标记。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-01-24 11:06:54

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

如果你正在转换“遗留”代码,最好在前面移除所有runat标签,否则你最终会遇到如下代码会给出错误的情况。

代码语言:javascript
复制
<% foreach (var cat in cats) { %>
    <div runat="server">
         <span class="name"> <%= cat.name %> </span> is a
         <span class="breed"> <%= cat.breed %> </span>
    </div>
 <% } %>

这段代码将无法告诉您一些关于'cat'超出范围的疯狂信息。最后,当您查看完整生成的代码时,您将看到<div>是作为它自己的整个方法生成的-这当然是一个不同的作用域,看不到猫。

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

您将看到当前的模板为head提供了以下内容:

代码语言:javascript
复制
<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>

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

事实证明,正如我怀疑的那样,head的代码隐藏在标题标记中查找现有的值(在这里应该是由<%= Html.Encode(ViewData["Title"]) %>输出的。如果它找到了一个( MVC模板中的所有示例视图都是这种情况),那么它就不会再做任何事情了。如果标题不存在(如果ViewData" title“为null或空),它将默认为在视图中由Title属性定义的任何内容:

代码语言:javascript
复制
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/RRMaster.Master" 
Title="View Products" AutoEventWireup="true" CodeBehind="ViewProduct.aspx.cs"
Inherits="RR_MVC.Views.Products.ViewProduct" %>

在我的母版页中,我会删除runat='server'标记-因为我认为我永远不会想要从视图的Title属性填充我的页面标题。但我暂缓做这件事,等待Phil承诺的关于这个主题的博客文章--以防runat服务器给我的CSS和JS提供任何有用的东西。

票数 7
EN

Stack Overflow用户

发布于 2009-01-15 12:29:49

这并不意味着你不能使用runat=的“服务器”,而是不需要在MVC中使用服务器端控件。如果您发现需要一个服务器端控件,并且正在代码隐藏中使用它,这表明应用程序正在回归webforms。通常在代码隐藏中发生的所有事情现在都应该在控制器或视图逻辑本身中进行处理。

票数 2
EN

Stack Overflow用户

发布于 2009-01-15 12:48:33

只需阅读本教程:

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

你需要的是

代码语言:javascript
复制
<head runat="server">

以便能够在视图中轻松定义页面标题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/446533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档