为什么我必须指定runat="server"我所有的ASP.NET控件时,这是一个强制性的属性和server是在我有限的ASP.NET的知识唯一的选择,我也得到如果我的错误不使用它?

我不明白,我可以有选择地使用它在我的HTML标记,我明白了客户机/服务器模式以及它实际上规定。

时,它们可能会只是由控制作为一个ASP.NET控制来暗示冗余标签,或者是有一个基本原因是什么?

有帮助吗?

解决方案

我一直相信它的存在更多的是你可以混合ASP.NET标记和HTML标签,和HTML标记的理解要么是runat="server"与否的选项。它不会伤害任何东西留在标签,它会导致编译错误把它取出来。在你暗示有关Web语言更多的东西,越容易它是一个崭露头角的程序员进来,学习它。这是因为任何要详细了解代码的属性很好的理由。

这个谈话对麦克·辛克尔的博客自己和微软全国服务的塔尔博特韦尔之间。相关信息是下面(第一段转述由于源语法错误):

  

[...] <runat="server">的重要性更为一致性和可扩展性。

     

如果开发商有标记一些标签(即<asp: />)为ASP.NET引擎忽略,那么这里还有标签和未来的改进中命名空间冲突的潜在问题。通过要求<runat=client>属性,这被否定。

它继续:

  

如果runat=server被要求对所有的客户端代码,解析器将需要解析所有标记和剥离出<%一部分。

他继续:

  

目前,   如果我的猜测是正确的,解析器   简单地忽略所有文本(标记或无   标签),除非它与标签   <!– #include属性或“<=>”   前缀或SSI“<=> ... (...)   此外,由于ASP.NET的设计   让网页设计师的分离   从Web开发人员(foo.aspx)   (foo.aspx.vb),网页设计师可以   用他们自己的网页设计师工具   地方HTML和客户端JavaScript   无需了解ASP.NET   特定标签或属性。

其他提示

我通常不喜欢去猜测,但我会在这一个...

如果你还记得微软的.NET营销炒作早在一天(2001?),它是很难说,甚至.NET了。是不是一台服务器?一个编程平台?一种语言?新的东西完全?鉴于广告,这是你希望它是什么含糊 - 它只是解决您可能遇到的任何问题。

所以,我的猜测是有一个隐藏的宏伟愿景ASP.NET代码可以运行在任何地方 - 服务器端或客户端,在Internet Explorer中的副本依赖于.NET运行库。 RUNAT =“服务器”只是一个残留残余,留下因为它的客户端相当于从未到生产。

还记得那些怪异的广告?

相关报道:从寄存器第二十一些.NET记录

不能够被包括在页中的所有控制的必须被在服务器上运行。例如:

<INPUT type="submit" runat=server />

这是基本相同:

<asp:Button runat=server />

删除从第一个所述RUNAT =服务器标签和您有在浏览器中运行一个标准的HTML按钮。是有原因的,并针对运行在服务器上的特定控制,有没有办法让ASP.NET为“承担”你基于HTML标记,你有想要的东西。这可能是可能的<asp:XXX />的控制家庭“推断”的RUNAT =服务器,但我的猜测是,微软会认为这是一个黑客的标记语法和ASP.NET引擎。

微软MSDN文章被遗忘的控件:HTML服务器控件使用说明RUNAT =“服务器”上的文本框<input type="text">一个例子的通过将其转化为<input type="text" id="Textbox1" runat="server">

  

这样做会给你的编程访问HTML元素   网页之前服务器创建并发送到客户端。   HTML元素必须包含一个id属性。此属性提供   作为元素的身份,使您能够以编程元素   通过其特定的ID。除了这个属性,HTML元素   必须包含RUNAT =“服务器”。这告诉处理服务器的    标签是在服务器上进行处理,并且不被认为是   传统的HTML元素。

<强>总之,启用对HTML元素添加到runat="server"它的编程访问。

我怀疑是它具有与服务器端控件是如何处理期间识别的事情。而不是具有通过名称在运行时检查每一个控制,以确定是否需要做服务器端处理,但它确实对标签内部节点表示的选择。编译器检查,以确保需要服务器标签所有的控件在验证环节都有他们。

在ASP.NET文件HTML元素,默认情况下,作为文本处理。为了使这些元素可编程的,一个runat="server"属性添加到HTML元素。该属性指示该元素应作为一个服务器控制处理。

它的存在,因为在ASP .NET所有控制从System.Web.UI.Control其具有“RUNAT”属性继承。

在类System.Web.UI.HTMLControl,不需要属性,但是,在System.Web.UI.WebControl要求属性的类。

修改 让我更加具体。因为asp.net是相当多的HTML的抽象,编译器需要某种形式的指令,使其知道具体的标签需要运行服务器端。如果该属性是不存在则不会不知道先处理它的服务器上。如果它不存在它假定它是常规的标记,并将其传递到客户端。

我认为,微软可以通过使编译器添加runat属性之前的页面曾经被编译,类似的类型擦除一件事是Java与仿制药,而不是删除解决这个问题含糊不清,它可以被写RUNAT =服务器只要它看到的asp:前缀的标签,所以开发者不必担心

如果您使用它在正常的HTML标签,这意味着你可以通过编程操作这些事件处理程序等,如更改页面加载一个锚标记的href或类...只有这样做,如果你有,因为香草html标签走得更快。

至于用户控件和服务器控件,不,他们没有他们只是不会工作,而不必钻研ASPX预处理器的内部结构,也说不清楚到底为什么,但将采取猜测,对于可能很好的理由,他们只是写的解析器这样一来,在寻找的东西明确标记为“做一些事情”。

如果@JonSkeet是趴趴走,他可能能够提供更好的答案。

当将数据提交给ASP.NET Web服务器的Runat =“服务器”中提到的控制将被表示为服务器应用斑点网对象。您可以手动输入HTML控件的代码或其他人可以使用的运行作为服务器的在设计视图中右击选项。 一旦你从工具箱拖到ASP.NET控件会自动获得此属性,其中通常HTML控件没有。

漂亮冗余属性,考虑到“ASP”标签显然是一个ASP元件和应该足够,以确定它作为一个服务器侧接近元件。

其他地方然而它用于提升正常标签在代码隐藏中使用。

我刚来到这个结论通过试验和错误: 需要RUNAT =“服务器”来访问服务器侧,在运行时的元素。 删除它们,重新编译,看会发生什么。

runat="Server"表示一个回发到服务器的HTML将发生 “控制”。

Web窗体使用postback不断地用信号通知服务器以处理网页控制事件。

.NET MVC页不使用"submit"(除了形式JQUERY)。 "runat"依靠runat来管理在客户端在网页(从而绕过了很多<=>消息到服务器的需要)。

所以: <=> Web窗体...使用<=>属性很多页面标记。

<=> <=>未落使用<=>属性在页面标记。

希望这有助于解释,为什么<=>是必要的......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top