2009-05-29 16 views
5

Ho un'applicazione Web con una pagina che carica il contenuto dal database. Voglio essere in grado di inserire un modulo nel contenuto dinamico, ma .net non consente al modulo interno di eseguire l'azione. C'è un modo per consentire questo o qualche altro modo in cui posso ottenere un modulo su una pagina di contenuto dinamico?Tag modulo sulla pagina ASP.net

Grazie.

--EDIT--

Penso di aver bisogno di chiarire qualcosa. Questa è una pagina aspx che carica il contenuto dal database. Per quanto ne so, il testo che estraggo dal db e stick nell'etichetta non viene mai compilato o elaborato da .net wp, quindi non posso usare il codice sottostante per risolvere questo problema.

risposta

4

Non ci può essere un solo modulo nella pagina (il modulo ASP) ; devi usare quella forma in qualche modo.

Per chiarire, può essere elaborato un solo modulo.

+13

stupido, stupido, webforms – annakata

+0

Puoi aggiungere quanti moduli vuoi su una pagina, ma solo uno con tag 'runat =" server "' –

1

Non con webform, n. È necessario lavorare all'interno del modulo a pagina intera utilizzando un gestore eventi collegato a Button a LinkButton. Fortunatamente, è abbastanza facile da fare:

foo.aspx:

... 
<asp:TextBox id="txtFoo" runat="server" /> 
<asp:Button id="btnFoo" runat="server" onclick="btnFoo_Click /> 
... 

foo.aspx.cs:

... 
protected void btnFoo_Click(object sender, EventArgs e) 
{ 
    string s = txtFoo.Text; 
    // do something with s 
} 
... 
0

si deve occuparsi del postback aggiungendo un gestore di eventi click server side a quello che si desidera essere il pulsante di invio "sottomaschera" (questo è il modo in cui i formas Web si occupano di più buutons di tipo di invio sulla stessa pagina) o fai qualcosa di intelligente con AJAX se non vuoi un post completo indietro

0

Ho incontrato prima questo problema. Una soluzione che ho fatto è quella di posizionare il mio codice che voglio che la mia azione venga eseguita all'interno di un asp: Panel. Con il pannello è possibile impostare l'attributo di "DefaultButton" su un pulsante all'interno del pannello e facendo clic sul pulsante (o premendo "invio") si attiva l'evento click del pulsante. Ho trovato questo abbastanza utile quando si desidera inviare un "modulo" premendo Invio quando ho una pagina principale che contiene l'unico asp ammissibile: Form.

Spero che questo aiuti.

5

Questo è un problema comune quando si desidera avere un modulo non di postback su un sito di terzi (ad esempio, un pulsante PayPal).

Il problema si verifica perché HTML non consente di avere un modulo in un modulo e la maggior parte delle pagine ASP.NET ha un "alto" <form runat="server" /> nell'HTML (o nella pagina Master).

La mia soluzione preferita è nascondere il tag del modulo "alto", mostrando ancora tutto il contenuto. Quindi puoi sentirti libero di scaricare qualsiasi tag che desideri nel corpo. Se lo fai dinamicamente puoi scegliere una pagina per pagina quali pagine hanno moduli personalizzati.

Ho creato una classe chiamata GhostForm.cs per gestirlo. Potete leggere tutto su di esso qui:

http://jerschneid.blogspot.com/2007/03/hide-form-tag-but-leave-content.html

0

Qualsiasi lavoro in giro sarebbe hacky e molto brutto. Di progettazione asp.net utilizza un tag form per pubblicare e ottenere dati. Questo è il motivo per cui lo chiamano un'applicazione Web Forms. Html non consente moduli annidati. Quello che vuoi fare è usare una WebRequest nel tuo codice.

Se stai provando qualcosa come un pulsante paypal potresti semplicemente usare qualcosa di simile.

Markup:

<div id="PayPalButtonContainer" runat="server"></div> 

Codice Dietro:

public static string GetPayPalButtonMarkup() 
    { 
     const string markup = @"https://www.paypal.com/cgi-bin/webscr 
            ?cmd=_xclick&business={0} 
            &item_name=Widget 
            &amount={1} 
            &currency_code=USD"; 
     return markup; 
    } 

    PayPalButtonContainer.InnerHtml = string.format(GetPayPalButtonMarkup,"YOUR PAYPAL USER NAME", "YOUR PRICE VALUE"); 
0

Quando sono arrivato in questo problema, ho trovato la soluzione più semplice per me è stato quello di semplice copiare e incollare la pagina master e dare un nome leggermente diverso, qualcosa come:

SiteNameMasterPage  'Default page with FORM tag 
SiteNameMasterPageNF 'No Form tag 

E quindi a seconda che io voglio Ed un tag FORM o o no, è sufficiente modificare il link masterpage nella parte superiore dei miei contenuti-pagine, come questo

<%@ Page Title="" Language="VB" MasterPageFile="~/SiteName.master" %> 
<%@ MasterType VirtualPath="~/SiteName.master" %> 
<!-- This masterpage has the default FORM tag --> 

o

<%@ Page Title="" Language="VB" MasterPageFile="~/SiteNameNF.master" %> 
<%@ MasterType VirtualPath="~/SiteNameNF.master" %> 
<!-- This masterpage does NOT have the default FORM tag --> 

e poi nella pagina di contenuto, dove voglio inserisci il mio modulo Posso includere il tag <form>

Problemi correlati