ASP.NET - No funciona __doPostBack('control','')desde una página después de ejecutar otra con target=_blank

 
Vista:

No funciona __doPostBack('control','')desde una página después de ejecutar otra con target=_blank

Publicado por catalina21 (5 intervenciones) el 07/12/2011 17:07:41
Hola, estoy realizando un sitio web en asp net 2.0 con C# utilizando el modelo code-behind y master page. En una páginas code-behind (página.aspx.cs) asociada a la master page leo una tabla y por cada registro genero dinámicamente link para editarlo, eliminarlo o ver el registro.

Para el link de “Editar” y “Ver” utilizo un linkbutton que al ser pulsado por el usuario debe ejecutar una función del lado del cliente y luego enviar el control a otra página.

Para el link de “Eliminar” igual utilizo un linkbutton q al ser pulsado llama a una función del lado del cliente que pregunta al usuario si esta seguro de realizar el borrado y de ser afirmativa la respuesta asigna un valor a un input hidden (para mantener un valor entre las distintas peticiones al servidor). y luego debe realizar el llamado a un control de servidor __doPostBack('ctl00$cuerpoHolder$LnkElimina',''); donde procede a eliminar de una tabla el registro seleccionado.

Todo funciona bien (Editar, Eliminar y Ver) al ejecutarse cada uno inmediatamente cargada la página.aspx pero el problema ocurre una vez que se hace clic en el link “Ver” que abre en otra ventana la página “VerRegistro”, e inmediatamente (luego de cerrar o minimizar la página “VerRegistro”) hace clic en “Eliminar” de la “Página.aspx” se ejecuta el código donde pregunta al usuario si esta seguro de eliminar el registro, se setea el valor al input hidden pero no realiza el envío del control al linkbutton “LnkElimina” __doPostBack('ctl00$cuerpoHolder$LnkElimina',''); al contrario lo que hace es ejecutar nuevamente “VerRegistro” en otra ventana.

No entiendo que esta sucediendo, porque no me funciona el __doPostBack('ctl00$cuerpoHolder$LnkElimina','') inmediatamente despues de ejecutar la llamada a una pàgina con theForm.target='_blank'. Recurro a este foro por si alguien tiene una idea de lo que debo hacer para resolver este inconveniente.


Pagina.aspx.cs

var = "<a onclick=\"llamadoEditar('" + Rs[0].ToString() + "');\" id=\"ctl00_cuerpoHolder_lnkEditar\" href=\"javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$cuerpoHolder$lnkEditar&quot;, &quot;&quot;, false, &quot;&quot;, &quot;EditarRegistro.aspx&quot;, false, true))\"> Editar</a>";
Response.Write(var);

var = "<a href=\"javascript:void(null);\" onclick=\"confirma('" + Rs[0].ToString() + "','" + Rs[1].ToString() + "');\">Eliminar</a>";
Response.Write(var);

var = " <a onclick=\"llamadoVer('" + Rs[0].ToString() + "');\" id=\"ctl00_cuerpoHolder_LinkVer\" href=\"javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$cuerpoHolder$LinkVer&quot;, &quot;&quot;, false, &quot;&quot;, &quot;../VerRegistro.aspx&quot;, false, true))\">ver</a>";
Response.Write(var);

protected void Elimina(object sender, EventArgs e)
{
if (IDCod.Value != ""){
//realiza el borrado
}
else {
Label2.Text = "Ha ocurrido un problema al eliminar: " + IDCod.Value;
}
}

Pagina.aspx:

<script type="text/javascript">
//Función para confirmar eliminación de registro

function confirma(id,nombre){
question = confirm("¿Esta seguro de eliminar el Registro: ( "+nombre+" )?");
if (question !="0"){
document.getElementById("<%=IDCod.ClientID%>").value = id;

__doPostBack('ctl00$cuerpoHolder$LnkElimina','');

}
return false;
}

// función para pasar el valor del Idregistro al input hidden y setear el target en la misma página.

function llamadoEditar(Dni)
{
document.getElementById("<%=Dni.ClientID%>").value = Dni;
theForm.target='_self';
}

// función para pasar el valor del Idregistro al input hidden y setear el target para que abra otra ventana.

function llamadoVer(Dni)
{
document.getElementById("<%=Dni.ClientID%>").value = Dni;
theForm.target='_blank';
}

</script>

<asp:LinkButton ID="LnkElimina" runat="server" OnClick="Elimina" style="display:none;"></asp:LinkButton>

<asp:LinkButton ID="lnkEditar" runat="server" PostBackUrl="~/GestorContenido/EditarRegistro.aspx" style="display:none;"></asp:LinkButton>

<asp:LinkButton ID="LinkVer" runat="server" PostBackUrl="~/VerRegistro.aspx" style="display:none;"></asp:LinkButton>

<input type="hidden" id="Dni" runat="server" />
<input type="hidden" id="IDCod" runat="server" />
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

No funciona __doPostBack('control','')desde una página después de ejecutar otra con target=_blank

Publicado por roger (45 intervenciones) el 07/12/2011 17:34:41
donde se asigna theForm???, podrias abrir las nuevas ventanas con window.open, para no afectar el formulario actual
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No funciona __doPostBack('control','')desde una página después de ejecutar otra con target=_blank

Publicado por Catalina21 (5 intervenciones) el 07/12/2011 22:19:36
Hola Roger, gracias por responder. Soy nueva en este mundo de páginas web, pero me ha tocado leer bastante, por eso pido disculpas de antemano si planteo alguna duda cuya respuesta sea muy evidente.

No uso window.open para abri las nuevas páginas porque necesito hacerlo con botones que manejen Cross Page Postback para pasar valores entre páginas sin usar la URL o sesiones.

Hay alguna manera de indicar que la página llamada a través del linkbutton tenga un target _blank o _self ya sea a través de una función del lado del cliente o en el linkbutton propiamente sin afectar el formaulario actual?

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No funciona __doPostBack('control','')desde una página después de ejecutar otra con target=_blank

Publicado por roger (45 intervenciones) el 07/12/2011 22:27:06
o sea que para el boton eliminar es para el unico que no necesitas la caracteristica de CrossPage Postback??
dices que solo pasa si primero se da click en otro de los botones, por ejemplo ver registro?

Perdona tanta pregunta, pero es para identificar la razon del problema

Nota: podrias poner un punto de interrupcion en el metodo Elimina del servidor, para ver si esta entrando a ese codigo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No funciona __doPostBack('control','')desde una página después de ejecutar otra con target=_blank

Publicado por catalina21 (5 intervenciones) el 07/12/2011 23:12:36
Exactamente, el único que no necesita la característica de CrossPage Postback es el boton Eliminar
La situación sólo ocurre si ejecuto el boton eliminar luego de hacer hacer clic en el boton para ver registro (el que abre otra ventana), si ejecuto el de editar y luego el de eliminar, funciona bien!

Siempre entra en la function confirma(id,nombre) ya que siempre hace la pregunta y asigna el valor al input hidden, pues coloco una interrupción justo antes de la instrucción __doPostBack('ctl00$cuerpoHolder$LnkElimina','') y se rompe alli.

No se si es que como el control queda en la página Ver Registro (que abre otra ventana) y al ejecutar el linkbutton de Eliminar como no tiene postback no recarga la página y entonces el control sigue quedando en la página Ver Registro... No tengo ni idea.

Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No funciona __doPostBack('control','')desde una página después de ejecutar otra con target=_blank

Publicado por roger (45 intervenciones) el 07/12/2011 23:31:12
prueba utilizando
WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("LnkElimina", "", false, "", "PaginaActual.aspx", false, true));
en lugar de __doPostBack('ctl00$cuerpoHolder$LnkElimina','');

Para que haga el codigo del evento click del boton ,manteniendose en la misma pagina
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No funciona __doPostBack('control','')desde una página después de ejecutar otra con target=_blank

Publicado por catalina21 (5 intervenciones) el 09/12/2011 14:39:33
Buen día, probé la sugerencia q me diste, pero al hacer clic sobre el linkbutton no se ejecutaba nada.

Bueno pero ya me esta funcionando! Indico la solución por si es útil para alguien:

Modifiqué la función de modo que inicializará algunos valores de el form actual:

function confirma(id,nombre){
question = confirm("¿Esta seguro de eliminar el Decano: ( "+nombre+" )?");
if (question !="0"){
document.getElementById("<%=IDCod.ClientID%>").value = id;
theForm.target='';
theForm.action='';
__doPostBack('ctl00$cuerpoHolder$LnkElimina','');
}
return false;
}


ASP. NET 2.0 al trabajar con Master Page cambia el nombre del formulario por aspnetForm. theForm es una variable global que define ASP. NET 2.0 en en un script que crea del lado del cliente:

var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}


Pero si se quiere tener más control cree mi propia variable quedando el codigo asi:

function confirma(id,nombre){
question = confirm("¿Esta seguro de eliminar el Decano: ( "+nombre+" )?");
if (question !="0"){
document.getElementById("<%=IDCod.ClientID%>").value = id;
var myForm = document.forms[0];
myForm.target='';
myForm.action='';
__doPostBack('ctl00$cuerpoHolder$LnkElimina','');
}
return false;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No funciona __doPostBack('control','')desde una página después de ejecutar otra con target=_blank

Publicado por catalina21 (5 intervenciones) el 09/12/2011 14:40:51
Gracias, por la atención prestada!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar