必须放置在带有runat=server的表单标签内

14
我已经尝试了整个上午,但没有任何结果。我似乎无法弄清楚自己做错了什么。我查看了两个链接(以及其他许多无用的链接),但仍未解决我的问题。这是一个WebUserControl...
收到以下错误:
“类型为'TextBox'的控件'HeadContent_CareersViewPosting_txtFirstName'必须放置在具有runat = server属性的表单标记内。”
已经尝试过这里这里这里的建议,但没有结果。仍然收到完全相同的消息。非常感谢任何新的建议!
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Careers View Posting.ascx.cs" Inherits="ascxStagingApplication.Careers.Careers_View_Posting" %>
<asp:Panel ID="pnlResume" runat="server">
    <table ID="tblMain" runat="server">
        <tr>
            <td>
                <asp:Label ID="lblFirstName" runat="server" Text="* First Name"></asp:Label>
            </td>
            <td>
                <asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox>
            </td>
        </tr>
        <tr>
            <td>
                <asp:Label ID="lblLastName" runat="server" Text="* Last Name"></asp:Label>
            </td>
            <td>
                <asp:TextBox ID="txtLastName" runat="server"></asp:TextBox>
            </td>
        </tr>
        <tr>
            <td>
                <asp:Label ID="lblEmail" runat="server" Text="* Email"></asp:Label>
            </td>
            <td>
                <asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
            </td>

        </tr>
        <tr>
            <td>
                <asp:Label ID="lblResume" runat="server" Text="* Resume"></asp:Label>
            </td>
            <td>
                <asp:FileUpload ID="fupResume" runat="server" />
            </td>
        </tr>
        <tr>
            <td>
                <asp:Button ID="btnSubmit" runat="server" Text="Submit"/>
            </td>
        </tr>
    </table>
</asp:Panel>

用户控件当前正在放置在虚拟测试网页上。以下是“虚拟”页面的代码。
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Page Careers View Posting.aspx.cs" Inherits="ascxStagingApplication.Careers.Page_Careers_View_Posting" %>

<%@ Register Src="~/Careers/Careers View Posting.ascx" TagPrefix="uc1" TagName="CareersViewPosting" %>

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
    <uc1:CareersViewPosting runat="server" id="CareersViewPosting" />
</asp:Content>

你在哪里使用这个“UserControl”? - Tim Schmelter
@TimSchmelter 添加了上面的页面代码。很抱歉! - Volearix
5个回答

18
在ASP.Net Webforms中,所有内容都需要在表单标签内运行。
所有服务器控件必须出现在<form>标签内,并且<form>标签必须包含runat="server"属性。 runat="server"属性表示该表单应该在服务器上处理。它还表示可以通过服务器脚本访问封闭的控件:
<form runat="server">

...HTML + server controls

</form>
在您的虚拟页面中尝试以下内容以允许服务器控件运行。
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Page Careers View Posting.aspx.cs" Inherits="ascxStagingApplication.Careers.Page_Careers_View_Posting" %>

<%@ Register Src="~/Careers/Careers View Posting.ascx" TagPrefix="uc1" TagName="CareersViewPosting" %>
<form runat="server">
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
    <uc1:CareersViewPosting runat="server" id="CareersViewPosting" />
</asp:Content>
</form>

此外,请检查您的 ~/Site.Master 文件是否包含 <form runat="server">。如果没有,通常情况下,在这里添加所有封闭的表单标签是很典型的做法。

您可以在此处阅读更多信息:http://www.w3schools.com/aspnet/aspnet_forms.asp


微软官方文档也提到了这一点-https://learn.microsoft.com/en-us/aspnet/web-forms/overview/older-versions-getting-started/master-pages/creating-a-site-wide-layout-using-master-pages-cs - PhysicalEd

5
如果您在runat="server"位置正确但仍出现错误,请尝试使用此代码。
 public override void VerifyRenderingInServerForm(Control control)
    {
         /* Confirms that an HtmlForm control is rendered for the specified ASP.NET
       server control at run time. */
    }

翻译自Rohit Rao。

很抱歉我的英语技能不太好。


1
所有服务器控件必须出现在一个<form>标签内,而且<form>标签必须包含runat="server"属性。
所有的Asp.net控件都是服务器控件,因此应该将它们放置在带有runat="server"属性的<form>标签内,如下所示。
<form runat="server">

place server controls here...

</form>

-4
>Button bt = new Button();
>bt.ID = "dd";
>bt.Text = "Click Me";
>this.Form.Controls.Add(bt);

10
虽然这段代码可能解决了问题,但包括解释真的能帮助提高您的帖子质量。请记住,您正在为未来的读者回答问题,而这些人可能不知道您的代码建议的原因。同时也请尽量避免在代码中添加过多的解释性注释,这会降低代码和解释的可读性! - Box Box Box Box

-5

你可以添加

<form runnat="server">
 // add content placeholder
</form>

1
应该使用 runat 而不是 runnat。 - Jason Wragg

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