2009-05-29 21 views
5

Tengo una aplicación web que tiene una página que carga el contenido de la base de datos. Quiero ser capaz de poner un formulario en el contenido dinámico, pero .net no permite que la forma interna realice su acción. ¿Hay alguna manera de permitir esto u otra forma de obtener un formulario en una página de contenido dinámico?Etiqueta de formulario en la página de ASP.net

Gracias.

--EDIT--

Creo que necesito aclarar algo. Esta es una página aspx que carga contenido de la base de datos. Hasta donde yo sé, el texto que extraigo de la base de datos y se pega a la etiqueta nunca es compilado o procesado por .net wp, por lo que no puedo usar el código para solucionar este problema.

Respuesta

4

No sólo puede haber un formulario en la página (la forma asp) ; tienes que usar esa forma de alguna manera.

Para aclarar, solo se puede procesar un formulario.

+13

estúpido, estúpido, webforms – annakata

+0

Puede agregar la cantidad de formularios que desee en una página, pero solo uno con la etiqueta 'runat =" server "' –

1

No con formularios web, no. Debe trabajar dentro del formulario de página completa utilizando un controlador de eventos conectado a Button a LinkButton. Afortunadamente, es bastante fácil de hacer:

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

o bien tiene que ocuparse de la devolución de datos agregando un controlador de eventos del lado del servidor a lo que quiere que sea el botón de envío de "subformularios" (esta es la forma en que las formas web manejan múltiples buutons de tipo de envío en la misma página) o haz algo inteligente con AJAX si no quieres una publicación completa

0

Me he encontrado con este problema antes. Una solución que he hecho es colocar mi código para que mi acción se realice dentro de un asp: Panel. Con el panel puede establecer el atributo de "DefaultButton" en un botón dentro del panel, y hacer clic en el botón (o presionar "enter") activará el evento click de ese botón. He encontrado esto muy útil cuando quiero enviar un "formulario" al presionar Enter cuando tengo una página maestra que contiene el único formulario asp: permitido.

Espero que esto ayude.

5

Este es un problema común, cuando desea tener un formulario que no sea de devolución a un sitio de terceros (como un botón de PayPal, por ejemplo).

El problema ocurre porque HTML no le permite tener formulario dentro de un formulario, y la mayoría de las páginas ASP.NET tienen un "alto" <form runat="server" /> en el HTML (o en la página Maestra).

Mi solución favorita es ocultar la etiqueta de formulario "alto", al tiempo que se muestra todo el contenido. Entonces puedes sentirte libre de volcar las etiquetas que quieras en el cuerpo. Si lo hace de forma dinámica, puede elegir página por página qué páginas tienen formularios personalizados.

Creé una clase llamada GhostForm.cs para manejar esto. Puede leer todos los detalles aquí:

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

0

Cualquier trabajo alrededor sería hacky y muy feo. Por diseño asp.net usa una etiqueta de formulario para publicar y obtener datos. Es por eso que lo llaman una aplicación de formularios web. Html no permite formularios anidados. Lo que quiere hacer es usar una WebRequest en su código.

Si está intentando algo así como un botón de PayPal simplemente podría usar algo como esto.

de marcado:

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

código subyacente:

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

Cuando llegué por primera vez a través de este problema, he encontrado la solución más simple para mí era sencillo copiar y pegar la página Master y darle un nombre ligeramente diferente, algo así como:

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

Y luego, dependiendo de si quiero ed una etiqueta de formulario o si no, simplemente cambian el enlace masterpage en la parte superior de mi contenido páginas, como este

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

y luego en la página de contenido, a donde quiera colocar mi formulario Puedo incluir la etiqueta <form>

Cuestiones relacionadas