Avatar billede finger Nybegynder
05. september 2002 - 19:52 Der er 2 kommentarer og
1 løsning

flere serverside forms på samme side: hvordan?

Vi samler flere user controls (ascx) på en side (aspx). på flere af disse user controls har vi <form runat="server">. når vi compilerer siden får vi den fejl at der kun kan være 1 serverside form på en side. Er der ikke en eller anden måde at komme rundt om dette på? det duer ikke med forskellig id/name eller lign.
kan man evt samle i andet end aspx?
fungerende eksempel belønnes godt!
-------------------
opretopgave.ascx
--------------------
<%@ Import namespace = "System.Data.SqlClient" %>
<%@ Import namespace = "WeCSharp.DataBaseForbindelse" %>
<body MS_POSITIONING="GridLayout">
    <TABLE height="882" cellSpacing="0" cellPadding="0" width="328" border="0" ms_2d_layout="TRUE">
        <TR>
            <TD width="0" height="0"></TD>
            <TD width="10" height="0"></TD>
            <TD width="318" height="0"></TD>
        </TR>
        <TR vAlign="top">
            <TD width="0" height="15"></TD>
            <TD colSpan="2" rowSpan="2">
                <form action="opretopgave.aspx" id="formen" method="post" runat="server" name="navn2">
                    <TABLE height="311" cellSpacing="0" cellPadding="0" width="870" border="0" ms_2d_layout="TRUE">
                        <TR vAlign="top">
                            <TD width="10" height="15"></TD>
                            <TD width="860"></TD>
                        </TR>
                        <TR vAlign="top">
                            <TD height="55"></TD>
                            <TD>
                                <h1>Indrapporter opgave</h1>
                            </TD>
                        </TR>
                        <TR vAlign="top">
                            <TD height="41"></TD>
                            <TD>
                                <p>Indvolveret projekt:
                                    <asp:DropDownList id="AlleProjekterListe" runat="server" /></p>
                            </TD>
                        </TR>
                        <TR vAlign="top">
                            <TD height="43"></TD>
                            <TD>
                                <p>Overskrift: <input id="Overskrift" type="text" size="20" runat="server" NAME="Overskrift"></p>
                            </TD>
                        </TR>
                        <TR vAlign="top">
                            <TD height="41"></TD>
                            <TD>
                                <p>Type af Opgave:
                                    <asp:DropDownList id="AlleTypeOpgaverListe" runat="server" /></p>
                            </TD>
                        </TR>
                        <TR vAlign="top">
                            <TD height="91"></TD>
                            <TD>
                                <p>Beskrivelse: <textarea id="Beskrivelse" rows="4" cols="30" runat="server" NAME="Beskrivelse"></textarea></p>
                            </TD>
                        </TR>
                        <TR vAlign="top">
                            <TD height="25"></TD>
                            <TD>
                                <p><asp:Button runat="server" text="Enter" onclick="GemOpretOpgave" ID="Button1" /></p>
                            </TD>
                        </TR>
                    </TABLE>
                </form>
            </TD>
        </TR>
        <TR vAlign="top">
            <TD width="0" height="867"></TD>
            <TD>
                <script language="C#" runat="server">
       
        void GemOpretOpgave(object ob, System.EventArgs sea)
        {
            //Henter de indtastede værdier fra html dokumentet:
            String overskrift = Overskrift.Value;
            String projekt = AlleProjekterListe.SelectedItem.Text;
            String type = AlleTypeOpgaverListe.SelectedItem.Text;
            String beskrivelse = Beskrivelse.Value;
            String indrapporteret = "01-02-2002";
           
            //Opretter et DataBaseForbindelses Objekt:
            DBForbindelse sqlServer = new DBForbindelse();
           
            //Opretter Querryen til databasen:
            sqlServer.aaben();
            String strSQL = "INSERT INTO Opgave VALUES('" + "p00" + "','" + overskrift + "','" + projekt + "','" + type + "','" + beskrivelse + "','" + indrapporteret + "','" + "Indrapporteret" + "')";
            sqlServer.setQuery(strSQL);
   
            sqlServer.runQuery();
            sqlServer.luk();
           
            Response.Write("<h4>Opgaven er indrapporteret!</h4>");
        }
       
        void ListAlleProjekter(DBForbindelse sqlServer)
        {
            if(!IsPostBack)
            {
                sqlServer.aaben();
                sqlServer.setQuery("SELECT Navn FROM Projekt");
                SqlDataReader queryProjekter = sqlServer.runQuery();
           
                ArrayList alleProjekter = new ArrayList();
           
                while(queryProjekter.Read())
                    alleProjekter.Add(queryProjekter.GetString(0));
           
                AlleProjekterListe.DataSource = alleProjekter;
                AlleProjekterListe.DataBind();
                sqlServer.luk();
            }
        }
       
       
        void ListAlleTypeOpgave(DBForbindelse sqlServer)
        {
            if(!IsPostBack)
            {
                sqlServer.aaben();
                sqlServer.setQuery("SELECT Type FROM TypeOpgave");
                SqlDataReader queryTOpg = sqlServer.runQuery();
           
                ArrayList tOpgListe = new ArrayList();
           
                while(queryTOpg.Read())
                    tOpgListe.Add(queryTOpg.GetString(0));
           
                AlleTypeOpgaverListe.DataSource = tOpgListe;
                AlleTypeOpgaverListe.DataBind();
                sqlServer.luk();
            }
        }
       
       
        void Page_Load(object sender, System.EventArgs e)
        {
            //Opretter et DataBaseForbindelses Objekt:
            DBForbindelse sqlServer = new DBForbindelse();
           
            //Henter alle projekter og lister dem:
            ListAlleProjekter(sqlServer);
           
            //Henter alle TypeOpgaver og lister dem:
            ListAlleTypeOpgave(sqlServer);
           
        }
           
                </script>
            </TD>
        </TR>
    </TABLE>
</body>
--------------
Opretopgave.aspx
--------------
<%@ Page Language="cs" %>
<%@ Register TagPrefix="footer" TagName="footerindhold" Src="footer.ascx" %>
<%@ Register TagPrefix="header" TagName="headerindhold" Src="header.ascx" %>
<%@ Register TagPrefix="opgave" TagName="opret" Src="opretopgave.ascx" %>
<%@ Register TagPrefix="hoved" TagName="dynmenu" Src="menu.ascx" %>
<HTML>
    <HEAD>
        <title>Basset X-Bug</title>
    </HEAD>
    <body bgColor="#330000">
        <header:headerindhold id="headerindhold1" runat="server"></header:headerindhold></TD>
        <TABLE id="main" height="450" cellSpacing="0" cellPadding="0" width="800" border="0">
            <tr>
                <td bgcolor="#330000" width="20"></td> <!-- ramme 3 i venstre side -->
                <td bgcolor="#ffffcc" width="100" valign="top" ><!-- her skal den dynamiske menu være -->
                    <hoved:dynmenu id="NogetTekst1" runat="server"></hoved:dynmenu></td>
                <td bgcolor="#ffffcc" width="630" valign="top">
                    <opgave:opret id="opret" runat="server"></opgave:opret></td> <!-- Her skal indholdet af siden være --> &lt;&gt;</TD> <!-- ramme 3 i højre side -->
            </tr>
        </TABLE>
        <footer:footerindhold id="footerindhold2" runat="server"></footer:footerindhold></TD>
    </body>
</HTML>
----------
logud.ascx
-----------
<form action="logud.aspx" runat="server" id="formen" name="navn1">
    <asp:ImageButton ID="logout" ImageUrl="img/logout.gif" OnClick="logUd" Runat="server"></asp:ImageButton>
</form>
<script language="C#" runat="server">

        private void logUd(object sd, System.Web.UI.ImageClickEventArgs vgu)
            {
            Session.Abandon();
            Response.Redirect("login.aspx");
            }
</script>
Avatar billede odegaard Nybegynder
05. september 2002 - 21:48 #1
Det kan man ikke. Istedet skal du kræve at din usercontrol er placeret i en form.
Jeg kan se i dine controls, at de poster til en anden side. Dette er ikke meningen med asp.net, som baserer sig på postback til samme side.
Ønsker du denne funktionalitet, skal du IKKE bruge webcontrols, men lave standard form-elementer, som i de gamle HTML-dage (dvs. uden runat=server attribut).
Avatar billede finger Nybegynder
12. september 2002 - 15:22 #2
hmmmm. tror jeg trækker spørgsmålet tilbage pga af manglende løsning. istedet opretter jeg et nyt senere med bedre forklaring. så kan du evt oprette indlæg der.
Avatar billede odegaard Nybegynder
12. september 2002 - 15:43 #3
Løsningen er skam god nok.
Enten laver du én form med runat="server" tags, og smider dine usercontrols heri, eller også laver du en masse forms uden runat="server".
Eftesom du ikke engang poster tilbage til samme side, kan jeg slet ikke se hvorfor du ønsker at udnytte .NET's magne fede funktioner og viewstates. Det forsvinder jo i og med at du poster til andre sider istedet.

Bottomline: Problemet ligger i den måde du ønsker at opbygge dit site med dine controls. Det er forkert designet, og kræver at du tænker det igennem igen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester