一个页面只能有一个服务端表单标签。

26

我正在使用母版页,但运行页面时出现以下错误信息:

一个页面只能有一个服务器端表单标签

我该如何解决这个问题?


2
ASP.NET Web Forms 的内在部分是,在呈现的页面上只能使用一个服务器端表单标记。您可以拥有其他表单,但它们不能具有 runat="server" 属性,如果我没记错的话。 - Russ Cam
1
完全从主页面中删除标签。 - ahmed
1
@RussCam 在_Master_或_Nested contentPage_中,好的模式是在form标签中吗? - Kiquenet
@Kiquenet 好的编程模式是不再使用Webforms,而是使用更适合该范例的框架,例如MVC :) 将其放在主页或内容页中将取决于主页中是否有需要放在表单内的控件。 - Russ Cam
7个回答

29

我认为你是这样做的:

<asp:Content ID="Content2" ContentPlaceHolderID="MasterContent" runat="server">
  <form id="form1" runat="server">

 </form>
</asp:Content>

不需要使用form标记,因为在母版页中已经存在相同的标记。

所以,只需删除它,就可以正常工作了。


您的主页面已经有一个表单了。不允许嵌套表单。 - Arun Raj
好的模式是在_Master_或_Nested contentPage_中使用form标签 - Kiquenet

11

看起来您在Master页面和出错的页面中都有一个表单标签。

你只能有一个表单标签。


5
你的页面是否包含以下内容:
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1"
Runat="Server">
</asp:content>

标签,你的控件是否都在这些标签内?你的MasterPage只应该有Form标签。


以下是我的理解和建议:

HTML元素可以放置在HTML页面的主体中,并且HTML页面支持多个Form元素,但是它们不能嵌套在彼此内部,您可以从W3C HTML规范中找到详细描述:

FORM元素

http://www.w3.org/MarkUp/html3/forms.html

对于ASP.NET Web表单页面而言,它基于一个包含所有控件的单个服务器端Form元素,因此我们通常不建议放置多个Form元素。但是,在ASP.NET页面(主控页)中仍然支持此功能,并且我认为您的主控页中存在不受支持的嵌套Form元素,同级别中的多个Form标记应该没有问题。例如:

此外,如果您想通过多个表单来实现将我们的页面发布到多个页面,那么我认为您可以考虑使用ASP.NET 2.0中的新功能进行跨页发布。这可以帮助我们使用按钮控件向不同的页面发布回发,而无需在页面上拥有多个Form元素:

ASP.NET Web页面中的跨页发布

http://msdn2.microsoft.com/en-us/lib...39(VS.80).aspx

http://msdn2.microsoft.com/en-us/lib...40(VS.80).aspx


5

只使用一个服务器端表单标签。

检查您的母版页是否包含<form runat="server"> - 应该只有一个。

为什么需要多个呢?


这个页面只包含占位符,我创建了一个新页面并运行它,然后就出现了错误。 - Manoj Wadhwani
@Manoj Wadhwani - 请确保两个页面只有一个服务器端表单标签。 - Oded

1
有时,当您按照下面的代码呈现当前页面时,会生成相同的错误。
StringWriter str_wrt = new StringWriter();
HtmlTextWriter html_wrt = new HtmlTextWriter(str_wrt);
Page.RenderControl(html_wrt);
String HTML = str_wrt.ToString();

所以我们如何对它进行排序?

这是我的确切问题,你找到了什么解决方法吗? - asdasdad
这也是问题所在。 - Jamshaid K.

1
请从“表单”标记中删除“runat =“server””,然后它一定会起作用。

0
如果您要呈现页面,则需要调用Response.End()以防止呈现整个页面。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接