我们可以在网页中使用多种forms吗?

到目前为止,我遇到的所有网页都至多包含一个<form>标签。 为什么不是多个? 我想不出为什么多个表单不能在同一个网页内共存的原因。

此外,为了特定于ASP.NET – 为什么所有的服务器控件都放在<form>标签中? 为什么不把它们放在别的地方?

加,

我发现在.aspx文件中, <form>标签具有runat = server属性,而普通的服务器控件(如Button也有一个。 所以看起来<form>也是一个服务器控件 。 但奇怪的是,我无法在Visual Studio Toolbox中find它。

可以有多种forms, 用 黑客 。

这确实是WebForms的一个缺点 。 在ASP.NET MVC中,您可以根据需要实现尽可能多的表单(并且这是有效且正确的网页行为)。

所有服务器控件放在<form>标记内的原因是为了让WebForms引擎识别它们,加载它们的值并将其值保存到ViewState中。 WebForms中几乎所有的控制pipe理基础架构都基于标签包含您从代码隐藏中访问的所有内容的想法。

正如指出的那样,这是WebForms的缺点之一。 另外,我想指出,通过跨页面发布和validation组 ,您通常可以达到您想要的行为(对于大多数 “多表单”解决scheme)。

关于额外的问题: <form runat="server">被parsing为幕后的HtmlForm类,像HtmlControl那样从runat="server" HTML元素inheritance。

不同于任何其他的HtmlControl,每个页面只能存在一个实例,并且它不会出现在工具箱中,因为它会自动添加到您创build的每个新窗体中,所以这是毫无意义的。

是的,这可以通过创build一个自定义的HtmlForm对象并根据需要切换表单来完成。 我刚刚在这里回答了一个类似的问题(带有代码):

贝宝表格遗址我的ASP.NET webforms布局 – >如何解决?

许多非服务器forms – 你可以,但只有一个runAt服务器的forms

我也发现这个:

服务器端表单标签是具有runat =“server”属性的标签。 如果缺less这个属性,那么这是一个典型的HTML表单标签。 结论是,只要只有一个具有runat =“server”属性,就可以在页面上使用多个表单标签。 不具有此属性的表单的缺点是视图状态将不起作用(这意味着使用后退/前进浏览器button时,表单值将消失)。 如果你真的需要在一个页面上的多个表单,这是一个小的代价。

  1. 采取母版页和设置。
  2. 在母版页中取一个表格。
  3. 第二种forms包含占位符。
  4. 只在写表格标签(不使用)
  5. 添加aspx页面并devise第二个窗体,但不能写入窗体标签只用于控件放置
  6. 采取button点击事件消防代码写

这是两种forms的适当方式