El resultado sera algo como esto:
Vista de datos
- ProvinciaId
- Nombre
<link type="text/css" href="@Href("~/Styles/jquery-ui-1.8.4.custom.css")" rel="stylesheet" />
<link type="text/css" href="@Href("~/Styles/Site.css")" rel="stylesheet" />
<script type="text/javascript" src="@Href("~/Scripts/jquery-1.4.2.min.js")"></script>
<script type="text/javascript" src="@Href("~/Scripts/jquery-ui-1.8.4.custom.min.js")"></script>- Una página “maestra” de provincias, que incluirá una vista parcial (partial view) con la grilla de las provincias y un botón para crear un nuevo elemento.
- La vista parcial: es la encargada de leer la tabla de provincias y mostrarla. Además mostrara los links de editar y eliminar.
- Métodos de tratamiento de datos. Son tres páginas CSHTML que solo contienen código para procesar diferentes solicitudes:
- Agregar nievo elemento.
- Modificar un elemento.
- Eliminar un elemento.
@{
bool bOk = true;
string sError = "";
var url = Request.Url.ToString();
if (url.Contains("?Nombre"))
{
var db = Database.Open("database");
string nombre = url.Substring(url.IndexOf('?') + 8);
if (nombre != "") {
var provincia = db.QuerySingle("SELECT * FROM Provincias WHERE Nombre like @0", nombre);
if (provincia == null) {
db.Execute("INSERT INTO Provincias (Nombre) VALUES (@0)", nombre);
}
else {
bOk = false;
//sError = "La provincia ya existe.";
sError = "1";
}
}
else {
bOk = false;
sError = "2";
}
}
else {
bOk = false;
sError = "2";
}
}
@if (bOk)
{
@:<script languaje="JavaScript">location.href='/Administracion/Provincias/ProvinciasJQ.cshtml';</script>
} else if (sError == "1"){
@:<script languaje="JavaScript">alert("Error: La provincia ya existe." );location.href='/Administracion/Provincias/ProvinciasJQ.cshtml';</script>
} else if (sError == "2") {
@:<script languaje="JavaScript">alert("Error: Debe ingresar un nombre para la provincia." );location.href='/Administracion/Provincias/ProvinciasJQ.cshtml';</script>
}
Obtiene por parámetro de la url el nombre a insertar y realiza reglas de negocios antes de hacerlo. Si da algún error muestra en alert y vuelve a la página que lo llamo.Método de edición de provincia EditarProvincia.cshtml
@{
bool bOk = true;
string sError = "";
var url = Request.Url.ToString();
if (url.Contains("?Nombre"))
{
var db = Database.Open("database");
string nombre = Request.QueryString["Nombre"];
string id = Request.QueryString["Id"];
//nombre = nombre.Substring(0, url.IndexOf('&'));
if (nombre != "" && id != "") {
var provincia = db.QuerySingle("SELECT * FROM Provincias WHERE Nombre like @0", nombre);
if (provincia == null) {
db.Execute("UPDATE Provincias SET Nombre = (@0) WHERE ProvinciaId = (@1)", nombre, id);
}
else {
bOk = false;
//sError = "La provincia ya existe.";
sError = "1";
}
}
else {
bOk = false;
sError = "2";
}
}
else {
bOk = false;
sError = "2";
}
}
@if (bOk)
{
@:<script languaje="JavaScript">location.href='/Administracion/Provincias/ProvinciasJQ.cshtml';</script>
} else if (sError == "1"){
@:<script languaje="JavaScript">alert("Error: La provincia ya existe." );location.href='/Administracion/Provincias/ProvinciasJQ.cshtml';</script>
} else if (sError == "2") {
@:<script languaje="JavaScript">alert("Error: Debe ingresar un nombre para la provincia." );location.href='/Administracion/Provincias/ProvinciasJQ.cshtml';</script>
} Obtiene por parámetro de la url el nombre y el id de la provincia a modificar y realiza reglas de negocios antes de hacerlo. Si da algún error muestra en alert y vuelve a la página que lo llamo.
Método de eliminación de provincia EliminarProvincia.cshtml
@{
// Valida si se tiene que eliminar un registro
var url = Request.Url.ToString();
if (url.Contains("?Eliminar"))
{
var db = Database.Open("database");
string id = url.Substring(url.IndexOf('?') + 10);
db.Execute("DELETE FROM Provincias WHERE ProvinciaId = @0", id);
}
}
<script languaje="JavaScript">location.href='/Administracion/Provincias/ProvinciasJQ.cshtml';</script>Obtiene por parámetro de la url el id de la provincia a eliminar y si existe lo elimina. Luego vuelve a la página que lo llamo.
Partial View ProvinciasGrid.cshtml
@{
var db = Database.Open("database");
var selectQueryString = "SELECT * FROM Provincias";
var data = db.Query(selectQueryString);
var grid = new WebGrid(source: data,
defaultSort: "Nombre",
rowsPerPage: 10);
}
<fieldset>
<legend>Listado de Provincias</legend>
<div id="grid">
@grid.GetHtml(tableStyle: "ui-widget ui-widget-content",
headerStyle : "ui-widget-header",
columns: grid.Columns(
grid.Column(header: "Accionnes",
format:
@<text><a href="../../Methods/Provincias/EliminarProvincia.cshtml?Eliminar=@item.ProvinciaId">(Eliminar)</a>
<a href="#" onclick="mostrarEdicion('@item.ProvinciaId', '@item.Nombre')">(Editar)</a></text>),
grid.Column("ProvinciaId", "Id"),
grid.Column("Nombre", "Provincia")
)
)
</div>
</fieldset>Básicamente lee todos los registros de la tabla de provincias y los muestra en una grilla. Además agrega dos links. Uno para eliminar, que llama al método EliminarProvincia con un parámetro que es el id de la provincia a eliminar. El otro link es el de editar y llama a una función de javascript que estará en la página principal de las provincias.
Página principal de provincias Provincias.cshtml
@{
// Set the layout page and page title
Layout = "~/_SiteLayout.cshtml";
Page.Title = "Tabla de Provincias";
}
<script type="text/javascript">
$(function() {
$('#dialog-form').dialog({
autoOpen : false,
modal: true,
height: 160,
width: 475,
buttons: {
'Agregar' : function(){
$.ajax({
type: "POST",
url: $("#add-book-form").attr('action'),
data: $("#add-book-form").serialize(),
dataType: "text/plain",
success: function(response) {
$('#dialog-form').dialog('close');
location.href = "../../Methods/Provincias/AgregarProvincia.cshtml?Nombre=" + $("#nombre").val();
},
error: function(response) {
alert(response);
$('#dialog-form').dialog('close');
}
});
},
Cancelar: function() {
$('#dialog-form').dialog('close');
}
}
});
$('#dialog-form-edit').dialog({
autoOpen : false,
modal: true,
height: 200,
width: 475,
buttons: {
'Aceptar' : function(){
$.ajax({
type: "POST",
url: $("#add-book-form").attr('action'),
data: $("#add-book-form").serialize(),
dataType: "text/plain",
success: function(response) {
$('#dialog-form').dialog('close');
location.href = "../../Methods/Provincias/EditarProvincia.cshtml?Nombre=" + $("#nombreEdit").val() + "&Id=" + $("#IdProv").val();
},
error: function(response) {
alert(response);
$('#dialog-form-edit').dialog('close');
}
});
},
Cancelar: function() {
$('#dialog-form-edit').dialog('close');
}
}
});
$('#nueva-provincia')
.button().click(function() {
$('#dialog-form').dialog('open');
});
});
function mostrarEdicion(id, descripcion){
$('#IdProv').val(id);
$('#nombreEdit').val(descripcion);
$('#dialog-form-edit').dialog('open');
}
</script>
<div id="grid" class="ui-widget">
@RenderPage("~/Partials/ProvinciasGrid.cshtml")
</div>
<div id="dialog-form" title="Agregar nueva provincia">
<div class="row">
<span class="label"><label for="nombre">Nombre:</label></span>
<input type="text" name="nombre" id="nombre" size="40" />
</div>
</div>
<div id="dialog-form-edit" title="Editar provincia">
<div class="row">
<span class="label"><label for="nombre">ID:</label></span>
<input type="text" disabled="disabled" name="IdProv" id="IdProv" size="5" />
<br/>
<span class="label"><label for="nombre">Nombre:</label></span>
<input type="text" name="nombreEdit" id="nombreEdit" size="40" />
</div>
</div>
<p><button id="nueva-provincia">Agregar nueva provincia</button></p> Esta página cuenta con dos div que serán las pantallas de creación y modificación de datos: dialog form y dialog form edit. Mediante JQuery se arma las respectivas pantallas y las acciones a realizar en cada una. Cada pantalla llamara al método que le corresponda, mencionado anteriormente.
Espero que sea de ayuda. Cualquier duda pueden comentar y con gusto, si es que puedo, se las aclarare.



