为什么你不能有一个包含多个服务器端Form标签的页面?

时间:2010-12-05 17:57:31

标签: asp.net forms

我想知道为什么asp.net不允许这样做? Lot的页面包含多于1个表单,登录 - 注册表单,搜索 - 其他表单等等......

所以我的猜测是我可以将一个表单与精细的oop asp.net对象相关联,而其他表单与普通的html相关联,我必须以两种完全独立的方式处理来自这些来自的响应。是吗?

请解释这里发生了什么,以及为什么asp.net不允许这个

2 个答案:

答案 0 :(得分:5)

ASP.NET webforms依赖于单个服务器端表单。

您可以根据需要添加任意数量的客户端表单(无runat="server"属性)。


这是因为尝试使用类似桌面的开发模型进行Web开发。

有关更多原因,请参阅this MSDN杂志文章:

  

单一表单模型是实现ASP.NET状态维护功能的关键元素。由于页面始终发布到自身,因此运行时可以轻松检索并恢复上次访问期间保存的状态。虽然还有其他方法可以保存和恢复页面状态,但使用单一表单模型是目前所有解决方案中最简单,最有效的方法。

     

一般来说,放弃多种形式并不是一个很大的牺牲。多种形式有时很有用,但可能不像您想象的那么频繁。例如,在大量页面中实现基于表单的功能(例如,在搜索和登录对话框中)时,您会发现使用多个表单很有帮助的场景。我将在后面的专栏中回到这里。不过,在进一步讨论之前,需要对HtmlForm类进行一次检查。


注意:

ASP.NET-MVC没有这样的限制 - 你可以拥有任意数量的表单。

答案 1 :(得分:2)

ASP.NET是使用类似桌面的思维模式构建的。换句话说,它的构建是为桌面开发人员提供类似桌面的平台来构建网站。为了支持这一举措,ASP.NET的设计者决定将整个页面包装在一个大的表单中,该表单将是页面上唯一的表单,以便页面上的所有控件都有一个共同的根目录。将数据发布到服务器。

如果允许多个runat="server"表单,则需要ASP.NET开发人员了解有关HTML / HTTP的更多信息。目标是允许人们使用按钮单击事件并以与WinForms模型相对应的方式选择列表更改事件。如果开发人员需要知道哪个表单是POST在哪里,就没有办法保持这种错觉。