Consideremos el siguiente escenario:
Clase javascript modalform.js
$(document).ready(function () {
$.ajaxSetup({ cache: false });
// busca los elementos el atributo data-modal y le suscribe el evento click
$('a[data-modal]').on('click', function (e) {
// Abre la ventana modal con el formulario solicitado
openmodal(this.href);
return false;
});
$('#modalGenerica').on('hidden.bs.modal', function () {
$('#contentModal').html('');
})
});
function openmodal(url) {
// Hace una petición get y carga el formulario en la ventana modal
$('#contentModal').load(url, function () {
$('#modalGenerica').modal({
keyboard: true
}, 'show');
// Suscribe el evento submit
bindForm(this);
});
}
function bindForm(dialog) {
// Suscribe el formulario en la ventana modal con el evento submit
$('form', dialog).submit(function () {
if ($(this).valid()) {
// Realiza una petición ajax
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (result) {
// Si la petición es satisfactoria, se recarga la página actual
if (result.success) {
window.location = window.location;
} else {
$('#contentModal').html(result);
bindForm();
}
}
});
return false;
} else {
return false;
}
});
}
Prerrequisitos
<div class="modal-dialog">
<div class="modal-content">
<div id='contentModal'></div>
</div>
</div>
</div>
Usamos un archivo XML como fuente de datos para ahorrar el que tengan que descargar algún backup de base de datos y lo tengan que cargar en algún motor de base de datos que puede o no tengan instalado y configurado.
La solución la pueden descargar desde este link: Descarga
- Aplicación MVC con administración de catálogos
- Lista de elementos en una vista
- Agregado, edición y eliminación de registros usando ventanas modales
Clase javascript modalform.js
$(document).ready(function () {
$.ajaxSetup({ cache: false });
// busca los elementos el atributo data-modal y le suscribe el evento click
$('a[data-modal]').on('click', function (e) {
// Abre la ventana modal con el formulario solicitado
openmodal(this.href);
return false;
});
$('#modalGenerica').on('hidden.bs.modal', function () {
$('#contentModal').html('');
})
});
function openmodal(url) {
// Hace una petición get y carga el formulario en la ventana modal
$('#contentModal').load(url, function () {
$('#modalGenerica').modal({
keyboard: true
}, 'show');
// Suscribe el evento submit
bindForm(this);
});
}
function bindForm(dialog) {
// Suscribe el formulario en la ventana modal con el evento submit
$('form', dialog).submit(function () {
if ($(this).valid()) {
// Realiza una petición ajax
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (result) {
// Si la petición es satisfactoria, se recarga la página actual
if (result.success) {
window.location = window.location;
} else {
$('#contentModal').html(result);
bindForm();
}
}
});
return false;
} else {
return false;
}
});
}
Prerrequisitos
- Bootstrapt (conjunto de estilos o archivo CSS)
- jQuery (en nuestro caso versión 1.10.2)
- jQuery Validate
- jQuery Validate Unobstrusive
- Bootstrap.js (para trabajar con las ventanas modales)
- El controlador para Index regresa una vista parcial. Esto por que es una ventana que hace uso del layout y se carga dentro de la página principal.
- Create, Edit y Delete devuelven una vista parcial. Si regresáramos una vista normal, se cargaría junto con el layout dentro de la ventana modal.
- Create, Edit y Delete (POST Actions) regresa un Json(new { success = true }). Esto lo espera modalform para recargar la vista principal, del listado.
- Se debe incluir en layout.cshtml una ventana modal genérica, que será donde se carguen las vistas parciales.
<div class="modal-dialog">
<div class="modal-content">
<div id='contentModal'></div>
</div>
</div>
</div>
Usamos un archivo XML como fuente de datos para ahorrar el que tengan que descargar algún backup de base de datos y lo tengan que cargar en algún motor de base de datos que puede o no tengan instalado y configurado.
La solución la pueden descargar desde este link: Descarga
excelente, buen aporte gracias!!!
ResponderBorrar