2010-07-04 11 views
9

en una página de contenido de una página web asp.net, me gustaría incluir el botón "paypal" "Pagar ahora".¿Está anidado <form> posible?

Tengo una página maestra y una página de contenido. En mi página de contenido, copio y pego el código de PayPal. En particular, uso un "modalpopupextender" para permitir que mi usuario compre el objeto. El problema es ... no funciona. Así que mis hipótesis son:

  1. No estoy seguro, pero creo que no puedo utilizar un anidado <form action>
  2. si no el primero, tal vez pueda no usar un <form action> en una ventana emergente modal?

alguien me puede sugerir una solución "elegante" para solucionar esto? Gracias ...

EDITAR: en particular, lo que intento hacer es permitir vender desde un sitio web. Tengo una página maestra y una página de contenido. Obviamente en la página maestra tengo la clásica "acción de formulario". Entonces me haya ido a PayPal y tiene este código: "

<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> 
<input type="hidden" name="cmd" value="_s-xclick"> 
<table> 
<tr><td> 
    <input type="hidden" name="on0" value="Annuncio Premium">Annuncio Premium 
</td></tr> 
<tr><td> 
    <select name="os0"> 
     <option value="Premium 1">Premium 1 €1,00</option> 
    </select> 
</td></tr> 
</table> 
<input type="hidden" name="currency_code" value="EUR"> 
<input type="hidden" name="encrypted" value="-----BEGIN "> 
<input type="image" src="https://www.paypal.com/it_IT/IT/i/btn/btn_paynowCC_LG.gif" border="0" name="submit" alt="PayPal - Il sistema di pagamento online più facile e sicuro!"> 
<img alt="" border="0" src="https://www.paypal.com/it_IT/i/scr/pixel.gif" width="1" height="1"> 
</form> 

así que he pegado en mi página de contenido ... ya que ... sin cambiar En particular, me ha pegado la misma. , en un panel, que mostrará un "modalpopupextender". Funciona. Pero lo que no funciona es cuando hago clic en el botón "Comprar ahora" de PayPal. Mi página web no se redirige a PayPal, desaparece modalpopup y nada sucede.

Respuesta

17

¡Tenía este problema exacto también y no podía creer que PayPal no hubiera proporcionado algún tipo de solución para desarrolladores de .NET!

Aquí es cómo lo resolví:

<asp:ImageButton ID="btnPayNow" runat="server" ImageUrl="myPayPalButton.jpg" 
PostBackUrl="https://www.paypal.com/cgi-bin/webscr" OnClick="btnPayNow_Click"/> 

utilizar un botón de ImageButton o normal y simplemente quitar las etiquetas de formulario para el código de PayPal, deje en los campos de entrada ocultos y los datos se publicarán en el PayPal url!

Agradable y fácil :)

Ps. El método 'btnPayNow_Click()' no hace nada, la firma existe pero no hay lógica en el código que tengo.

+0

es EXACTAMENTE lo que resolvió mi problema ... Gracias y muchas gracias a la otra respuesta ... todos son correctos ... – stighy

+0

Solución brillante. – Seany84

+1

increíble trabajo – MonsterMMORPG

3

usted está en lo cierto, en la que no se puede anidar <form> s.

Tampoco puede usar la acción del formulario para crear una ventana emergente: el atributo action es la url a la que se envía el formulario. Sin embargo, puede tener muchos <form> s en la página, siempre que no estén anidados. Tal vez eso te solucione tu problema.

¿Puede describir exactamente lo que está tratando de lograr? No está claro a partir de su pregunta cuál es el problema.

0

Tiene razón en su primera hipoteca, no puede haber anidado las etiquetas de formulario en una página.

Solo tiene que poner el código de la ventana emergente fuera del formulario, puede tener cualquier número de formularios en la página, siempre que no estén anidados.

1

Si entiendo la pregunta correctamente, está intentando crear una ventana emergente de HTML dinámico que contiene un formulario de PayPal. Está teniendo problemas porque la ventana emergente contiene un formulario, pero el HTML para la ventana emergente ya está dentro de un formulario.

Si el problema que está experimentando es el descrito anteriormente, la solución es bastante simple. Debe mover todo el HTML para la ventana emergente fuera del elemento form que sale. Si está utilizando CSS para diseñar correctamente su sitio, debería ser posible mostrar su ventana emergente dinámica donde lo necesite en la página utilizando un posicionamiento relativo o absoluto. El HTML para la ventana emergente no necesita estar dentro de otra forma.También puede ser posible (quizás incluso necesario) poner el contenido de la ventana emergente en iframe, que se puede enviar de forma totalmente independiente del resto de la página. La semántica de cómo funciona tu ventana emergente dependerá de cómo necesites que funcione tu página.

Por lo tanto, para ser claros ... no es posible anidar elementos form. Sin embargo, tampoco es necesario para satisfacer sus necesidades.

EDIT:

Para mejorar la respuesta anterior a la luz de la cuestión actualizada. Puede tener múltiples paneles de contenido en una página maestra. Debería ser completamente posible crear otro panel de contenido que esté fuera de su elemento form en su página maestra ... y coloque su ventana emergente modal dentro de este panel de contenido alternativo. Mi respuesta anterior se aplicará, ya que ya no tiene formularios anidados.

+0

hi Jrista. Tienes razón ... pero desafortunadamente mi problema aún permanece. Esto porque: 1. si quiero usar el "modal popupextender", puedo hacerlo solo si inserto mi extensor entre "form runat = server".Pero si lo hago, aparece el error "solo una forma runat = server por página" (yo servidor de runat de doble forma, el primero desde la página maestra, el segundo para el botón de PayPal) ... mmm esto es un problema molesto ... – stighy

+1

@stighy: Debería ser posible crear una ventana emergente dinámica usando solo CSS y Javascript (recomiendo JQuery o Mootools). No está limitado a usar solo extensiones de ASP.NET para lograr un sitio web dinámico. Hay CARGAS de recursos en la red que explican cómo crear ventanas emergentes dinámicas modales con JQuery ... Recomiendo encarecidamente investigarlas. – jrista

0

¡La respuesta de Dal es correcta! (no tomar crédito con mi respuesta)

Tuve un problema similar en ASP.NET (4.0) al intentar enviar datos a SagePay (lo mismo que la publicación de formularios de PayPal). Estaba escribiendo los campos de la forma en que utilizan dinámicamente paneles en el código subyacente utilizando

Dim Panel As New Panel 
Panel.Controls.Add(New LiteralControl("My <input> controls HTML")) '1 control.add per <input> control. 
MyDiv.Controls.Add(Panel) 

estaba escribiendo todo el formulario <> dinámicamente también, así que cuando llegó a la depuración he recibido ninguna advertencia con respecto a la cuestión de que toda mi Site.Master está dentro de a: ¡esto no es visible desde una página .aspx usando el patrón como plantilla! Fue bastante frustrante ... Hasta que leí que no puede haber un formulario anidado <> ... Solo hay dos alternativas para esto:

1) mover los detalles del formulario fuera del primero que está dentro de mi Site.Master de la página .aspx en sí. (No me gustó la idea de esto, desordenado desordenado!)

2) crear otro control que NO sea para publicar mis datos.


¡Elegí este último!

<asp:Button id="btn_payment" value="Proceed to Payment" Text="Proceed to Payment" runat="server" PostBackUrl="https://test.sagepay.com/gateway/service/vspform-register.vsp" /> 

El botón publicado a SagePay, tomó mis campos generados dinámicamente (llamado desde la página .aspx) y como ya estaban dentro de la de mi Site.Master - todo funcionó bien! - Espero que esto ayude a cualquiera que use HTML generado dinámicamente con formularios.