【问题标题】:Getting "A page can have only one server-side Form tag" error, not using a master page出现“一个页面只能有一个服务器端表单标记”错误,而不是使用母版页
【发布时间】:2013-08-10 21:30:43
【问题描述】:

所以我是开发团队的新人,正在尝试更新“仪表板”类型的页面,这是我们用户的默认登录页面。 default.aspx 页面由 16 个 Web 用户控件 (.ascx) 组成。我被要求在仪表板上添加股票“小部件”,以便用户可以监控我们公司的股票代码。为了允许不同的时间范围(1 天、5 天、3 个月等),我计划在新的 .ascx 中使用菜单(选项卡)。当我尝试使用菜单时,我收到错误“Control 'StockDisplay_StockMenu' of type 'Menu' must be placed inside a form tag with runat=server”。如果我将菜单包装在表单标签中,我会收到 "A page can only one server-side Form tag" 错误。

大多数搜索结果都建议查看母版页,但我们在这里没有使用。我检查了 default.aspx 页面,它没有任何表单标签。其他搜索建议删除 .ascx 中的

和 标签,我已经这样做了,但我仍然有问题。

这是我的精简代码,它仍然会产生错误:

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="UC_StockDisplay.ascx.vb" Inherits="UC_StockDisplay" %>
<%@ Import Namespace="System.Data" %>

<form id="Form1" runat="server">
    <asp:Menu ID="StockMenu" runat="server">
        <Items>
            <asp:MenuItem Text="One Day" />
            <asp:MenuItem Text="Five Days" />
            <asp:MenuItem Text="Three Months" />
            <asp:MenuItem Text="Six Months" />
            <asp:MenuItem Text="One Year" />
        </Items>
     </asp:Menu>
</form>

这是默认的.aspx:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<%@ Register src="UC_HelpUs.ascx" tagname="HelpUs" tagprefix="uc1" %>
<%@ Register src="UC_ImportantNumbers.ascx" tagname="ImportantNumbers" tagprefix="uc2" %>
<%@ Register src="UC_ImportantLinks.ascx" tagname="ImportantLinks" tagprefix="uc3" %>
<%@ Register src="UC_Printers.ascx" tagname="Printers" tagprefix="uc4" %>
<%@ Register src="UC_WorkOrder.ascx" tagname="WorkOrder" tagprefix="uc5" %>
<%@ Register src="UC_RequestForms.ascx" tagname="UCRequestForms" tagprefix="uc6" %>
<%@ Register src="UC_MiscLinks.ascx" tagname="MiscLinks" tagprefix="uc7" %>
<%@ Register src="UC_Emergency.ascx" tagname="Emergency" tagprefix="uc8" %>
<%@ Register src="UC_Floorplan.ascx" tagname="Floorplan" tagprefix="uc9" %>
<%@ Register src="UC_Directory.ascx" tagname="Directory" tagprefix="uc10" %>
<%@ Register src="UC_Weather.ascx" tagname="Weather" tagprefix="uc11" %>
<%@ Register src="UC_Holiday.ascx" tagname="Holiday" tagprefix="uc12" %>
<%@ Register src="UC_CoreValues.ascx" tagname="CoreValues" tagprefix="uc14" %>
<%@ Register src="UC_MyInfo.ascx" tagname="MyInfo" tagprefix="uc15" %>
<%@ Register src="UC_Travel.ascx" tagname="Travel" tagprefix="uc16" %>
<%@ Register src="UC_StockDisplay.ascx" tagname="StockDisplay" tagprefix="uc17" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>IT Helpdesk</title>
</head>
<body style="background-color:#1B5B9D;">

    <center>
    <a href="/"><img src="images\banner2.gif" border=0></a><br>
    <font face="Courier New Bold" size=5 color=white>Helpdesk 3.5</font><br>
    <table width=100% cellspacing=10>
        <tr>
            <td width="33%" valign=top>
                <uc1:HelpUs ID="HelpUs" runat="server" />
                <br>
                <uc3:ImportantLinks ID="ImportantLinks" runat="server" />
                <br>                
                <uc10:Directory ID="Directory" runat="server" />
                <br>            
                <uc6:UCRequestForms ID="UCRequestForms" runat="server"/>
                <br>
                <uc7:MiscLinks ID="MiscLinks" runat="server" />
            </td>
            <td width="33%" valign=top align=center>
                <uc5:WorkOrder ID="WorkOrder" runat="server" />
                <br>
                <uc8:Emergency ID="Emergency" runat="server" />
                <br>
                <uc2:ImportantNumbers ID="ImportantNumbers" runat="server" />
                <br>
                <uc11:Weather ID="Weather" runat="server" />

    <td width="33%" valign=top>
                <uc17:StockDisplay ID="StockDisplay" runat="server" />
                <br />
                <uc9:Floorplan ID="Floorplan" runat="server" />
                <br>
                <uc4:Printers ID="Printers" runat="server" />
                <br>
                <uc15:MyInfo ID="MyInfo" runat="server" />
                <br>
                <uc14:CoreValues ID="CoreValues" runat="server" />
                <br>
                <uc12:Holiday ID="Holiday" runat="server" />
                <br />
                <uc16:Travel ID="Travel" runat="server"></uc16:Travel>
            </td>
        </tr>
    </table>
    </center>


</body>
</html>

【问题讨论】:

  • 控件不能有表单标签。所以你需要把它去掉。你能展示一个实际的精简页面来展示你是如何将控件放置在其中的吗?
  • Chris - 完全相同的代码(减去表单标签)。如问题中所述,如果我排除表单标签,则会收到一条错误消息,提示我需要它们。
  • 我问的是控件进入的页面。它是如何结构化的,你将控件放在哪里,它是否在页面表单元素中?
  • Chris - 此 Web 用户控件位于 default.aspx 页面上。该页面上没有表单标签。一会儿我看看能不能发一下。

标签: asp.net vb.net menu ascx


【解决方案1】:

添加一个控件后,您将拥有一个带有 runat="server" 标记的表单:

<form id="Form1" runat="server">
    <asp:Menu ID="StockMenu" runat="server">

您已经提到您在一页中有 16 个用户控件。所以你有 16 个带有 runat="server" 标签的表单。这是不允许的。

解决方案: 正如 Chris Lively 所建议的,从您的 wsercontrols 中去掉 form 标签。在页面中只添加一个表单标签。你应该没事的。

所有控件应如下所示:

<asp:Menu ID="Menu1" runat="server">
    <Items>
        <asp:MenuItem Text="One Day" />
        <asp:MenuItem Text="Five Days" />
        <asp:MenuItem Text="Three Months" />
        <asp:MenuItem Text="Six Months" />
        <asp:MenuItem Text="One Year" />
    </Items>
</asp:Menu>

你的页面应该是这样的:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<%@ Register src="UC_HelpUs.ascx" tagname="HelpUs" tagprefix="uc1" %>
<%@ Register src="UC_ImportantNumbers.ascx" tagname="ImportantNumbers" tagprefix="uc2" %>
<%@ Register src="UC_ImportantLinks.ascx" tagname="ImportantLinks" tagprefix="uc3" %>
<%@ Register src="UC_Printers.ascx" tagname="Printers" tagprefix="uc4" %>
<%@ Register src="UC_WorkOrder.ascx" tagname="WorkOrder" tagprefix="uc5" %>
<%@ Register src="UC_RequestForms.ascx" tagname="UCRequestForms" tagprefix="uc6" %>
<%@ Register src="UC_MiscLinks.ascx" tagname="MiscLinks" tagprefix="uc7" %>
<%@ Register src="UC_Emergency.ascx" tagname="Emergency" tagprefix="uc8" %>
<%@ Register src="UC_Floorplan.ascx" tagname="Floorplan" tagprefix="uc9" %>
<%@ Register src="UC_Directory.ascx" tagname="Directory" tagprefix="uc10" %>
<%@ Register src="UC_Weather.ascx" tagname="Weather" tagprefix="uc11" %>
<%@ Register src="UC_Holiday.ascx" tagname="Holiday" tagprefix="uc12" %>
<%@ Register src="UC_CoreValues.ascx" tagname="CoreValues" tagprefix="uc14" %>
<%@ Register src="UC_MyInfo.ascx" tagname="MyInfo" tagprefix="uc15" %>
<%@ Register src="UC_Travel.ascx" tagname="Travel" tagprefix="uc16" %>
<%@ Register src="UC_StockDisplay.ascx" tagname="StockDisplay" tagprefix="uc17" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>IT Helpdesk</title>
</head>
<body style="background-color:#1B5B9D;">
<form id="form1" runat="server">
    <%-- your usercontrols and other tags --%>
</form>

编辑:正如您提到的其他用户控件没有表单,只需在主页中添加表单标签并从用户控件中删除该标签即可解决您的问题。

【讨论】:

  • afzalulh - 如果有 16 个带有 runat="server" 标签的表单,我怀疑最后 15 个不会被削减 - 因为你不能有超过 1 个。至少,那是错误提示什么。
  • 这就是为什么我建议从所有控件中删除标签并在页面本身中只保留一个标签
  • afzalulh - 标签不存在于其他控件中。这就是为什么我建议 16 个中的 15 个如果确实有标签也不会工作。
猜你喜欢
  • 2012-08-29
  • 2011-02-24
  • 1970-01-01
  • 2020-05-26
  • 2014-06-26
  • 2015-10-15
  • 2011-08-16
相关资源
最近更新 更多