我想知道为什么asp.net不允许这样做? Lot的页面包含多于1个表单,登录 - 注册表单,搜索 - 其他表单等等......
所以我的猜测是我可以将一个表单与精细的oop asp.net对象相关联,而其他表单与普通的html相关联,我必须以两种完全独立的方式处理来自这些来自的响应。是吗?
请解释这里发生了什么,以及为什么asp.net不允许这个
答案 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在哪里,就没有办法保持这种错觉。