web-dev-qa-db-fra.com

Doit être placé à l'intérieur d'une balise de formulaire avec runat = server

J'ai essayé cela toute la matinée sans résultat. Je n'arrive pas à comprendre ce que je fais mal. J'ai vérifié les deux liens (parmi beaucoup d'autres liens inutiles) et je n'ai pas encore résolu mon problème. C'est un WebUserControl ...

Réception de l'erreur suivante: Control 'HeadContent_CareersViewPosting_txtFirstName' de type 'TextBox' doit être placé dans une balise de formulaire avec runat = server.

Déjà essayé les suggestions ici , ici et ici et aucun résultat. Toujours reçu exactement le même message. Quelques nouvelles suggestions seraient grandement appréciées!

<%@ 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>

Le contrôle utilisateur est actuellement placé sur une page Web fictive à des fins de test. Voici le code de la page «factice».

<%@ 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>
11
Volearix

Dans les formulaires Web ASPNet, tout doit être exécuté dans une balise de formulaire.

Tous les contrôles serveur doivent figurer dans une balise <form> et la balise <form> doit contenir l'attribut runat="server". L'attribut runat="server" indique que le formulaire doit être traité sur le serveur. Il indique également que les contrôles inclus sont accessibles aux scripts du serveur:

<form runat="server">

...HTML + server controls

</form>

Dans votre page fictive, essayez ce qui suit pour permettre aux contrôles du serveur de s'exécuter.

<%@ 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>

Vérifiez également que votre fichier ~/Site.Master contient le <form runat="server"> sinon -a s, il serait assez typique que ce soit l'endroit où placer votre balise de formulaire englobante.

Vous pouvez en lire plus ici: http://www.w3schools.com/aspnet/aspnet_forms.asp

13
Martin Brown

Si vous mettez droit de runat = "serveur" mais que vous rencontrez toujours une erreur, veuillez essayer ce code.

 public override void VerifyRenderingInServerForm(Control control)
    {
         /* Confirms that an HtmlForm control is rendered for the specified ASP.NET
       server control at run time. */
    }

cr. de Rohit Rao 

désolé pour ma mauvaise compétence en anglais.

1
Mitr Raiputta

Tous les contrôles serveur doivent figurer dans une balise <form> et la balise <form> doit contenir l'attribut runat="server".

Tous les contrôles Asp.net sont des contrôles serveur. Ils doivent donc être placés dans une balise de formulaire avec l'attribut runat="server", comme ceci

<form runat="server">

place server controls here...

</form>
0
Rae Lee