2009-09-10 14 views
5

Al ver que nuestro equipo mantiene una Intranet que tiene clientes usuarios que tienen javascript habilitado, sabemos que podemos intervenir y comenzar a usar jQuery más "a fondo". Nuestro sistema es muy grande, por lo que aunque usemos áreas en nuestra aplicación ASP.NET MVC, la gran cantidad de páginas para agregar, editar, eliminar y ver conjuntos de datos por subsistema de un área es realmente bastante grande. Un subsistema de un área puede tener aproximadamente veinte tablas de datos. Si hay veinte tablas de datos, y tiene páginas individuales para agregarlas, editarlas, eliminarlas y verlas, significa que hay un total de páginas. Ahora imagine que hay veinte subsistemas por área, luego una sola área tendría 20 * 60 páginas, y tenemos aproximadamente 15 áreas en nuestra Intranet. Entiendes el punto, es enorme.jQuery CRUD en ASP.NET MVC

Pasando a mi punto real, quiero reducir esto usando las capacidades de jQuery de tener una tabla de datos en una página, presionar "eliminar" y me da un diálogo de eliminación con un botón de confirmación que luego envíe el formulario, redirija a la acción correcta y haga el trabajo por mí. Ahora necesito una guía en las siguientes áreas:

  1. Si quisiera eliminar sin publicar de ninguna manera utilizando ASP.NET MVC, ¿cuál es el proceso para hacer esto? Esto incluye presionar eliminar, se apaga y verificar que sea capaz de eliminar (las relaciones FK deben tratarse de la manera correcta), luego si puede eliminarlo y eliminar la fila de la tabla en la vista, todo sin refrescar la página.
  2. ¿Cómo puedo llamar a la acción de eliminación de un proceso asincrónico utilizando jQuery? ¿Es sabio hacerlo? Usualmente usamos Html.ActionLink. ¿Tendría que envolverlo en una forma?
  3. Lo mismo ocurre con la edición y la actualización, una vez más, ¿cuál es la mejor manera de hacerlo?

Estoy buscando una solución elegante, y algo que no es difícil de aplicar para cada página que tengo que hacer esto. Cualquier aporte seria muy apreciado.

+1

Sólo por curiosidad, ¿ha mirado en el marco dinámico de datos de MS? Creo que podría ser compatible con MVC pero no positivo. Si lo entiendo correctamente, se reduciría el número de páginas. Como dije, es curioso si lo buscaste para este sitio. – JoshBerke

+2

Los datos dinámicos no funcionan bien con MVC, pero MVC 2 tiene vistas predeterminadas de las plantillas, que le brindan las partes más útiles de los datos dinámicos integrados. –

Respuesta

3

Estoy trabajando en un proyecto que utiliza enlaces a disparar a acciones de eliminación a través de Ajax Post (sin devolución).

$("a.deleteLink").click(function(event) 
{ 
    event.preventDefault(); 
    if (confirm("Are you sure you want to delete this section?")) 
    { 
     //TODO Display processing indicator 

     var myId = /* id of element */ ; 

     $.post("/Section/Delete", { id: myId }, function(data) 
     { 
      if (data == "Success") 
      { 
       //handle success 
       //TODO Fade out element using .fadeOut() 
      } 
      else 
      { 
       //handle error 
      } 
     }); 
    } 
}); 

El método del controlador es simplemente en /Controllers/SectionController.cs. Solo acepta POST como cualquier acción que cambie la base de datos.

private SectionRepository secRepo = new SectionRepository(); 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Delete(long id) 
    { 
     Section sec = secRepo.GetById(id); 

     secRepo.Delete(sec); 
     secRepo.Save(); 

     return Content("Success"); 
    } 
+1

Creo que esto se ve bien. Creo que su indicador de procesamiento de visualización '// TODO' pertenece a una línea arriba/antes de la acción' .post() ', y no a la función de devolución de llamada donde está (que solo se dispararía * después * se completó su acción , no mientras esperas ...) – Funka

+1

Oooh, esto se ve bien. Nunca he visto 'devolver contenido (" mensaje ");' antes. ¿Cómo es que haces 'if (confirm (" message ") == true)'? ¿Por qué no simplemente 'if (confirm (" message "))'? – Kezzer

+0

Ustedes tienen razón. Este sigue siendo un código "rápido y sucio" muy temprano. El contenido devuelto ("Correcto") en el controlador no se mostró. Solo algo para que el javascript sepa que fue exitoso. Si alguien tiene sugerencias para mejores formas de verificar si una publicación de Ajax es exitosa, hágamelo saber. He actualizado el código de muestra un poco para reflejar estos elementos. –

2

Chad Myers tiene un good article en esto.

También one de Dino Esposito.

+0

Dino parece bastante informativo y completo. Sin embargo, tendré que leerlo mejor más adelante. – Kezzer

3

Acabo de terminar de ver un video sobre algunas plantillas que puede obtener para ASP.NET MVC con Subsonic. Si bien aún no lo implementé o incluso lo probé, ¡parece increíble! Eche un vistazo here.


no estoy seguro de si esto es una opción viable para su o no, pero recientemente hemos tenido una necesidad similar a la suya y liberar nuestra principal aplicación como una aplicación ASP.NET MVC (usando jQgrid) y luego una aplicación secundaria de Formularios Web de ASP.NET para nuestras funciones de Administración utilizando Datos Dinámicos. Esto funcionó extremadamente bien y nos ahorró un montón de tiempo.

También parece que DynamicData and MVC se unirán en algunos de los próximos lanzamientos.

Otras lecturas ...
* David Hayden
* rbqsoft
* Sharp Architecture Wiki

0

Si también quiere lanzar el diálogo jQuery a la fiesta, esta Ricardo Covo post hace un buen trabajo

enter image description here