Dividir Web Form en 3 partes (C#)

red_knight

Engineer
Se incorporó
28 Septiembre 2005
Mensajes
193
Buenas a tod@s,

Vengo para pedir de su sabiduria en programacion, ya que tengo un problema y no lo he podido resolver.

Tengo un formulario de registro web, desarrolado en C#, pero necesito dividirlo en 3 secciones, dentro de la misma pagina donde se encuentra todo, actualmente:

1715894430302.png



Intente hacer algo como esto (separando por divs) que es lo que mas se asemeja a lo que necesito:

Form with Multiple Steps



Pero me falla en el lado de javascript:

1715894671504.png

1715894731055.png



Quedo atento a su ayuda y desde ya muchas gracias!
 

Archivo adjunto

  • 1715894731301.png
    1715894731301.png
    1,3 MB · Visitas: 53

freishner

Capo
Se incorporó
16 Noviembre 2021
Mensajes
391
Hola, postea el js completo si se puede. Pero lo que estas viendo es básicamente que el js intenta accesar a un nodo del DOM que no existe, por lo tanto devuelve null y dicho null no tiene las propiedades de un nodo html Element. Lo que es un síntoma del problema principal (no saber javascript).

Lo ideal sería obtener el elemento en una variable y validar si dicha variable es distinto a null para operar sobre ella.
HTML:
<p id="test">Hola mundo</p>
JavaScript:
var elemento = document.getElementById('test');

// un equivalente a if (elemento !== null)
if (!!elemento) {
    // Operar sobre la variable aquí
}

Esa sería una solución parche, de ahí tienes que mirar C# a ver si no se rompió el ciclo postback.
 
Última modificación:
Upvote 0

Gran_Maestre

Copuchento
Se incorporó
1 Octubre 2005
Mensajes
1.208
quieres que las secciones se puedan mostrar dependiendo de alguna accion?, detalla el porque quieres dividir el formulario
 
Upvote 0

red_knight

Engineer
Se incorporó
28 Septiembre 2005
Mensajes
193
Hola, postea el js completo si se puede. Pero lo que estas viendo es básicamente que el js intenta accesar a un nodo del DOM que no existe, por lo tanto devuelve null y dicho null no tiene las propiedades de un nodo html Element. Lo que es un síntoma del problema principal (no saber javascript).

Lo ideal sería obtener el elemento en una variable y validar si dicha variable es distinto a null para operar sobre ella.
HTML:
<p id="test">Hola mundo</p>
JavaScript:
var elemento = document.getElementById('test');

// un equivalente a if (elemento !== null)
if (!!elemento) {
    // Operar sobre la variable aquí
}

Esa sería una solución parche, de ahí tienes que mirar C# a ver si no se rompió el ciclo postback.
Hola, el js es el mismo que aparece en el link que deje en el post:


var currentTab = 0; // Current tab is set to be the first tab (0)
showTab(currentTab); // Display the current tab

function showTab(n) {
// This function will display the specified tab of the form ...
var x = document.getElementsByClassName("tab");
x[n].style.display = "block";
// ... and fix the Previous/Next buttons:
if (n == 0) {
document.getElementById("prevBtn").style.display = "none";
} else {
document.getElementById("prevBtn").style.display = "inline";
}
if (n == (x.length - 1)) {
document.getElementById("nextBtn").innerHTML = "Submit";
} else {
document.getElementById("nextBtn").innerHTML = "Next";
}
// ... and run a function that displays the correct step indicator:
fixStepIndicator(n)
}

function nextPrev(n) {
// This function will figure out which tab to display
var x = document.getElementsByClassName("tab");
// Exit the function if any field in the current tab is invalid:
if (n == 1 && !validateForm()) return false;
// Hide the current tab:
x[currentTab].style.display = "none";
// Increase or decrease the current tab by 1:
currentTab = currentTab + n;
// if you have reached the end of the form... :
if (currentTab >= x.length) {
//...the form gets submitted:
document.getElementById("regForm").submit();
return false;
}
// Otherwise, display the correct tab:
showTab(currentTab);
}

function validateForm() {
// This function deals with validation of the form fields
var x, y, i, valid = true;
x = document.getElementsByClassName("tab");
y = x[currentTab].getElementsByTagName("input");
// A loop that checks every input field in the current tab:
for (i = 0; i < y.length; i++) {
// If a field is empty...
if (y.value == "") {
// add an "invalid" class to the field:
y.className += " invalid";
// and set the current valid status to false:
valid = false;
}
}
// If the valid status is true, mark the step as finished and valid:
if (valid) {
document.getElementsByClassName("step")[currentTab].className += " finish";
}
return valid; // return the valid status
}

function fixStepIndicator(n) {
// This function removes the "active" class of all steps...
var i, x = document.getElementsByClassName("step");
for (i = 0; i < x.length; i++) {
x.className = x.className.replace(" active", "");
}
//... and adds the "active" class to the current step:
x[n].className += " active";
}
 
Upvote 0

red_knight

Engineer
Se incorporó
28 Septiembre 2005
Mensajes
193
quieres que las secciones se puedan mostrar dependiendo de alguna accion?, detalla el porque quieres dividir el formulario
Solo que se dividan en 3 paginas (o vistas) dentro de la misma pagina original. Que se separen y luego irlas completando y avanzando con el boton siguiente. Ninguna condicion especial para ir cambiando entre ellas.
 
Upvote 0

freishner

Capo
Se incorporó
16 Noviembre 2021
Mensajes
391
Hola, el js es el mismo que aparece en el link que deje en el post

Pensé que era un form de empresa o algo, lo que comentas es un flujo, no hay una única forma de hacer eso, pero no entraría a calentarme la cabeza con algoritmos complejos, es tan sencillo como tener 3 divs, cada uno con un id, obtener una variable con cada div que para efectos de claridad llamaremos contenedores c[n], y con dicha variable accesar a los elementos, así te ahorras todos los nulls.

Ésto es lo más sencillo que podrías hacer para ahorrarte cualquier dolor de cabeza. Y dentro de la función del evento click del objeto bsend, puedes llamar a una función que realice las validaciones respectivas con un if, si da true le haces submit al form, si no no.

 
Upvote 0

red_knight

Engineer
Se incorporó
28 Septiembre 2005
Mensajes
193
Pensé que era un form de empresa o algo, lo que comentas es un flujo, no hay una única forma de hacer eso, pero no entraría a calentarme la cabeza con algoritmos complejos, es tan sencillo como tener 3 divs, cada uno con un id, obtener una variable con cada div que para efectos de claridad llamaremos contenedores c[n], y con dicha variable accesar a los elementos, así te ahorras todos los nulls.

Ésto es lo más sencillo que podrías hacer para ahorrarte cualquier dolor de cabeza. Y dentro de la función del evento click del objeto bsend, puedes llamar a una función que realice las validaciones respectivas con un if, si da true le haces submit al form, si no no.

Muchas gracias por tu tiempo freishner. Voy a aplicar esto, a ver como me va, y te cuento.
 
Upvote 0
Subir