2009-03-10 7 views
7

Estamos tratando de modificar dinámicamente el atributo de acción del formulario ASP.NET principal en la página maestra.Cómo cambiar el atributo de acción de aspnetForm en MasterPage dinámicamente

La página tiene un botón de selección, el usuario selecciona una de las opciones y hace clic en enviar, en devolución, en función de la selección se debe establecer el atributo de acción del formulario y el formulario debe enviarse automáticamente.

Estábamos tratando de usar JavaScript para el mismo.

document.forms[0].action = "option1.aspx"; 
document.forms[0].submit(); 

Pero esto no parece funcionar, no hay ningún impacto en el atributo de acción.

si no usamos una página maestra, esto se puede lograr fácilmente mediante el uso

this.Form.Action = "option1.aspx"; 
ClientScript.RegisterStartupScript(this.GetType(),"test1", 
    "document.form[0].submit();",true); 

Lamentablemente, no podemos eliminar la página principal .. ningún indicaciones de cómo se puede lograr esto ..?

Respuesta

5

Esto es algo que he leído que desearían no haber hecho. La etiqueta Form obtiene su atributo de acción codificado. Debe usar un Adaptador de control para controlar su construcción en tiempo de ejecución. Lo uso especialmente para la reescritura de URL, cuando requiero que la URL de devolución sea la reescrita que he creado. Scott Gu hizo el código para ello y se puede encontrar aquí:

http://www.scottgu.com/blogposts/urlrewrite/UrlRewrite_HttpModule1.zip

Y la dirección para el artículo:

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

+0

Niza. Exactamente lo que necesitaba. +1 – Neil

+0

+1 Útil. Basado en esto, eliminé el formulario basado en el servidor e hice algo de HTML clásico. – JDB

0

¿La forma tiene que pasar los valores a la resultante ¿página? De lo contrario, ¿por qué no utilizas Response.Redirect en la página correcta? Por ejemplo, suponiendo que esté utilizando un RadioButtonList llama lstOptions:

protected void btnSubmit_Click(object sender, EventArgs ags) { 
     switch (lstOptions.SelectedValue) { 
      case "option1": 
       Response.Redirect("~/option1.apsx"); 
       break; 
      //etc 
     } 
} 

Si tiene que pasar los valores ¿por qué incluso desencadenar un puesto de vuelta en absoluto? Parece que puedes lograr lo que quieres con solo javascript. Por ejemplo presumiendo su formulario se denomina Form1 y sus botones de radio tienen un nombre de opciones:

<input type="submit" value="Submit" onclick="javascript:submitForm()" /> 

<script type="text/javascript"> 
    function submitForm() { 
     for (var i=0; i < document.form1.options.length; i++) { 
     if (document.form1.options[i].checked) { 
      document.forms[0].action = "option" + i + ".aspx"; 
      document.forms[0].submit(); 
     } 
     } 
    } 
</script> 
+0

sí, necesito obtener valores de esta página ... por lo tanto, no puedo redirigir ... intenté usar la opción 2 pero no funciona de esa manera ... además, el nombre de la página para el evento de acción se genera en solo tiempo de ejecución ... así que no es tan directo ... gracias por la ayuda ... :) –

Cuestiones relacionadas