我们可以在网页中使用多种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时,表单值将消失)。 如果你真的需要在一个页面上的多个表单,这是一个小的代价。
- 采取母版页和设置。
- 在母版页中取一个表格。
- 第二种forms包含占位符。
- 只在写表格标签(不使用)
- 添加aspx页面并devise第二个窗体,但不能写入窗体标签只用于控件放置
- 采取button点击事件消防代码写
这是两种forms的适当方式