Foros del Web » Programando para Internet » ASPX (.net) »

Acceso a otra clase

Estas en el tema de Acceso a otra clase en el foro de ASPX (.net) en Foros del Web. Hola. Tengo un proyecto web compuesto por 2 formularios. Cada uno de estos webforms tienen la Clase de tipo Public (Public Class ClaseA y Public ...
  #1 (permalink)  
Antiguo 11/05/2006, 05:24
 
Fecha de Ingreso: abril-2006
Mensajes: 166
Antigüedad: 18 años
Puntos: 0
Sonrisa Acceso a otra clase

Hola.

Tengo un proyecto web compuesto por 2 formularios.
Cada uno de estos webforms tienen la Clase de tipo Public (Public Class ClaseA y Public Class ClaseB).

Supongamos que ahora estoy trabajando en la Clase "ClaseA".
¿Sabe alguien si hay alguna posibilidad de ejecutar un evento del servidor de la clase "ClaseB"?

Si pongo lo siguiente me da error, porque no me reconoce el "ClaseB":

ClaseB.btnsiguiente_Click(Nothing, Nothing)

En las aplicaciones de windows no había ningún problema, si la clase y los eventos eran de tipo "public" se podía acceder a ellos.


Mil gracias.
  #2 (permalink)  
Antiguo 11/05/2006, 16:17
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 3 meses
Puntos: 7
Cita:
Iniciado por aupaneu
Hola.

Tengo un proyecto web compuesto por 2 formularios.
Cada uno de estos webforms tienen la Clase de tipo Public (Public Class ClaseA y Public Class ClaseB).

Supongamos que ahora estoy trabajando en la Clase "ClaseA".
¿Sabe alguien si hay alguna posibilidad de ejecutar un evento del servidor de la clase "ClaseB"?
Con qué objetivo quieres hacer eso?, explica mejor lo que quieres hacer. (normalmente no es buena idea llamar a los manejadores de eventos...)

Cita:
Si pongo lo siguiente me da error, porque no me reconoce el "ClaseB":

ClaseB.btnsiguiente_Click(Nothing, Nothing)

En las aplicaciones de windows no había ningún problema, si la clase y los eventos eran de tipo "public" se podía acceder a ellos.
Falso, en el ejemplo que pones, ten en cuenta que btnsiguiente_click NO es un evento sino simplemente un método, y para que puedas invocarlo éste tendría que ser Shared.

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #3 (permalink)  
Antiguo 12/05/2006, 04:17
 
Fecha de Ingreso: abril-2006
Mensajes: 166
Antigüedad: 18 años
Puntos: 0
Lo de llamar a métodos de otras clases lo quiero hacer porque en realidad el formulario "A" es una página donde hay unos botones para seleccionar el formulario con el que deseemos trabajar. Estos formularios se pueden ejecutar individualmente, con sus propios botones para avanzar de registro, guardar...

El tema es que las acciones que se pueden realizar en éstos formularios son idénticas, sólo que en un formulario se gestionan empresas y en el otro formulario, personas.

Lo que pretendo es que desde el formulario "A" tenga unos botones "comunes" para ambos formularios (personas y empresas) que ejecuten estas acciones de avanzar de registro, guardar registro, etc.

Dependiendo el formulario que se haya elegido, llamará a un método de una clase "B" o a un método de una clase "C".

Un ejemplo:

En un método del webform "A" pongo algo así:

//Si hemos seleccionado el formulario de "personas", intento llamar a su método:
if(formulario_abierto="personas") then Call personas.btnavanzar_registro_Click(Nothing, Nothing)
//Si hemos seleccionado el formulario de "empresas", intento llamar a su método:
if(formulario_abierto="empresas") then Call empresas.btnavanzar_registro_Click(Nothing,Nothing )

El método (no evento, perdón por el error) lo he declarada como Shared de la siguiente manera (en el webform de "personas"):

Shared Sub btnavanzar_registro_Click(ByVal sender As Object, ByVal e As System.EventArgs)
msgbox("Quiero acceder aqui desde el webform "A"!!!")
End sub

Pero después desde "A" sigo sin poder acceder a él, ni siquiera puedo acceder al class de "personas" como lo hacía en las aplicaciones de windows:

Call Clase_personas.btnavanzar_registro_Click(Nothing, Nothing)


Espero que me haya explicado, sinceramente espero que no os resulte un "pesao".


Gracias por conestar.


Saludos.
  #4 (permalink)  
Antiguo 12/05/2006, 14:08
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 3 meses
Puntos: 7
No se puede hacer eso desde el lado del servidor, ya que el protocolo http es "stateless", tendrías que utilizar código de cliente para así "generar" los eventos que deseas.

En todo caso, algo más natural para hacer lo que quieres sería utilizando herencia.

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #5 (permalink)  
Antiguo 15/05/2006, 00:30
 
Fecha de Ingreso: abril-2006
Mensajes: 166
Antigüedad: 18 años
Puntos: 0
Antes de nada gracias por contestar.

Ok. Entonces, ¿no puedo hacer llamadas a métodos de otras páginas?

Es que me han encargao hacer unos botones comunes para los 2 formularios.

Anteriormente hice algo similar en una aplicación windows, utilizando el sistema del MDI Parent, children... y poniéndole un menú de tipo "ToolStrip" en el que le ponía los botones necesarios para llevar a cabo las acciones en el formulario "child" correspondiente.

No hay alguna manera de hacer algo similar en aplicaciones web?

Muchas gracias .


Saludos.
  #6 (permalink)  
Antiguo 15/05/2006, 04:29
 
Fecha de Ingreso: abril-2006
Mensajes: 166
Antigüedad: 18 años
Puntos: 0
Buenas.

He estado buscando acerca de la herencia.

Supuestamente si pongo lo siguiente, debería dejarme acceder a métodos de la clase "secundario" desde la clase "página_principal", pero no es el caso:

//Clase desde la que deseo acceder:
Public Class pagina_principal
Inherits secundario

//Clase a la que quiero acceder:
Public Class secundario
Inherits System.Web.UI.Page

Me dice que "secundario" no está definido.

Sabe alguien a que se debe?


Gracias.

Última edición por aupaneu; 15/05/2006 a las 04:45
  #7 (permalink)  
Antiguo 15/05/2006, 04:58
 
Fecha de Ingreso: abril-2006
Mensajes: 166
Antigüedad: 18 años
Puntos: 0
Se me olvido señalar que cada clase está en una página aspx diferente, pero en el mismo proyecto claro.
  #8 (permalink)  
Antiguo 15/05/2006, 09:14
 
Fecha de Ingreso: abril-2006
Mensajes: 40
Antigüedad: 18 años
Puntos: 0
Lo que quieres hacer es un asistente ?
Si es asi te recomiendo que te documentes sobre el metodo server.transfer

O quieres crear secciones similares en tu pagina?
Segun dices quieres reutilizar botones..

Las aplicaciones web se manejan muy diferentes a las aplicaciones windows, las instancias de clase o de objetos no permanecen en el servidor por siempre, cada ves que el cliente envia un formulario aspx al servidor se vuelven a instanciar los objetos de esta, todas las referencias de los objetos se guardan en un campo oculto llamado viewstate, que esta en cada pagina, entonces cuando tu quieres invocar a otro metodo, en ese momento no tienes la instancia de la clase de la otra pagina o clase por tanto seria ilogico querer acceder a un objeto textBox de otra pagina pues esta pagina nunca existira, Mas sin embargo si es posible acceder a alguna funcion o metodo publico de tu clase tambien púedes acceder a un textbox no digo que no, pero no estara instanciado, y por tanto no tendra valores ademas por default asp.net establece funciones como privadas y los objetos como protected pero puedes cambiarlos a publicos para acceder a ellos.

Con todo esto te digo no es que no se pueda pero NO seria logico al menos en el manejo de aplicaciones web (es decir no solo asp.net).

Bueno despues de tanto rollo como sugerencia final.

Puedes crear tus propios controles ascx, los cuales son secciones de paginas web pues estos no generan las etiquetas <body>, entonces estos controles siempre se deben incluir en una pagina.aspx con lo cual puedes crear tus proias secciones reutilizables de codigo, por ejemplo puedes crear un control.ascx donde tengas tus botones, te recomiendo que para acceder a este control definas las propiedades y metodos que requieras pero no que cambies los metodos de los controles asp ademas en el control puedes definir tus propios eventos parametrizados.

Si quieres explica mejor tu problema y posiblemente se te pueda ayudar al menos con un ejemplo de como se deberia de hacer en asp.net.

Un saludo BYE
  #9 (permalink)  
Antiguo 16/05/2006, 00:53
 
Fecha de Ingreso: abril-2006
Mensajes: 166
Antigüedad: 18 años
Puntos: 0
Gracias por tu respuesta.

Te explicaré más detalladamente mi problema.

Tengo un proyecto web que contiene:

-Formulario para gestionar personas (form_personas.aspx)
-Formulario para gestionar empresas (form_empresas.aspx)

Estos están ya perfectamente acabados.
Pero ahora, para no tener éstos formularios "separados", tengo otro formulario (principal.aspx) con la intención de poder desde ahí seleccionar haciendo click en un botón uno de los 2 formularios existentes (el que gestiona las personas y el que gestiona las empresas) para poder trabajar con ellos. Para llevar acabo esta operación lo que he hecho es insertar en el principal.aspx dos Iframes ocultos:

<iframe id="frempresas" src="form_empresas.aspx" frameborder="0" scrolling="auto" style="position:absolute; left:184px; top:86px; width:408px; height:388px; z-index:5" visible="false" runat="server"></iframe>
<iframe id="frpersonas" src="form_personas.aspx" frameborder="0" scrolling="auto" style="position:absolute; left:176px; top:40px; width:424px; height:520px; z-index:5" visible="false" runat="server"></iframe>

Si en principal.aspx hacemos click en el botón de "Gestionar personas", entonces el iframe que está vinculado con "form_personas" se pondrá en "visible" para poder trabajar con el.

Si hacemos click en "Gestionar empresas", entonces oculto el Iframe de "form_personas" y pongo en "visible" el iframe de "form_empresas".

Hasta aqui todo está hecho.

Pero ahora llega el problema:

El principal.aspx tiene que tener una serie de controles (por ejemplo botones de comando) para poder llevar a cabo acciones sobre el iframe que esté visible. Estos botones que quiero utilizar son:

-Retroceder registro
-Avanzar registro
-Guardar cambios
-Añadir nuevo registro

Estos botones ya los tenía programados en los formularios form_personas.aspx y form_empresas.aspx, pero me dicen que ahora estos botones no deben estar en cada unos de estos formularios sino en el principal.aspx (para evitar duplicidad de código, porque si hay que hacer algún cambio costaría más...)

Si desde principal.aspx tengo en estado "visible" el iframe de empresas por ejemplo, y hago click en el botón de "Avanzar registro" ubicado en principal.aspx, entonces lo que tiene que hacer es pasar al siguiente registro de form_empresas.aspx.
Si por el contrario tengo en estado "visible" el iframe de personas y hago click en "Avanzar registro", entonces lógicamente lo que debe hacer es pasar al siguiente registro de form_personas.aspx.

Es posible que el enfoce que le he dado a todo esto no sea correcto, quizá el principal.aspx no debería ser aspx sino asxc... no lo sé.

A pesar de mi "chapa" os pego el código HTML de principal.aspx:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>::::: Página principal :::::</title>
<script language="javascript" type="text/javascript" src="Javascript/JS_def.js"></script>
</head>
<body>
<form id="form_default" method="post" runat="server">
<center>
<input type="Button" value="Gestión de personas" visible="true" style="height: 24px; color: white; background-color: #006dff; font-variant: small-caps; border-left-color: black; border-bottom-color: black; border-top-color: black; border-right-color: black; cursor:hand; width: 192px;" id="btnpersonas" runat="server" />
<input type="Button" value="Gestión de empresas" visible="true" style="width: 192px; height: 24px; color: white; background-color: #009c55; font-variant: small-caps; border-left-color: black; border-bottom-color: black; border-top-color: black; border-right-color: black; cursor:hand" id="btnempresas" runat="server" />
<input type="Button" value="Gestión de disponibilidad" visible="true" style="width: 192px; height: 24px; color: white; background-color: #ff3300; font-variant: small-caps; border-left-color: black; border-bottom-color: black; border-top-color: black; border-right-color: black; cursor:hand" id="btndisponibilidad" runat="server" />&nbsp;
<input id="txtfabierto" runat="server" style="width: 24px" type="hidden" /><br /><br />
<asp:Button ID="btnanterior" runat="server" Text="Anterior registro" Enabled="False" Height="24px" Visible="False" Width="104px" />
<asp:Button ID="btsiguiente" runat="server" Text="Siguiente registro" Visible="False" Width="112px" />
<asp:Button ID="btnguardar" runat="server" Text="Guardar cambios" Visible="False" Width="112px" />
<asp:Button ID="btnnuevo" runat="server" Text="Nuevo registro" Visible="False" Width="96px" />
<asp:Button ID="btnaceptar" runat="server" Text="Añadir registro" Visible="False" Width="112px" />
</center>
<iframe id="frpersonas" src="form_personas.aspx" frameborder="0" scrolling="auto" style="position:absolute; width:408px; height:431px; z-index:5; left: 176px; top: 104px;" visible="false" runat="server"></iframe>
<iframe id="frempresas" src="form_empresas.aspx" frameborder="0" scrolling="auto" style="position:absolute; left:184px; top:86px; width:408px; height:388px; z-index:5" visible="false" runat="server"></iframe>
<iframe id="frdisponibilidad" src="form_disponibilidad.aspx" frameborder="0" scrolling="auto" style="position:absolute; left:176px; top:40px; width:424px; height:520px; z-index:5" visible="false" runat="server"></iframe>
&nbsp;&nbsp;
</form>
</body>
</html>


Muchas gracias a todos.


Saludos
  #10 (permalink)  
Antiguo 16/05/2006, 04:44
 
Fecha de Ingreso: abril-2006
Mensajes: 166
Antigüedad: 18 años
Puntos: 0
Hola.

Por fin lo solucioné, lo que he hecho al final es crearme un master page con los botones comunes, y los formularios de emrpesas y personas vinculados a éste.
Al hacer click en algún boton pregunto si en el ContentPlaceholder existe por ejemplo el campo de texto "email". Si existe quiere decir que se está trabajando con el formulario de gestión de personas, si no existe, quiere decir que estamos con el de empresas.


Muchas gracias a todos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:09.