2011-01-26 21 views
43

Soy completamente nuevo en mvc y trato de crear una aplicación ficticia para aprender mvc 3. He trabajado en el ejemplo de la tienda de música y ahora estoy intentando extenderlo ligeramente en una aplicación más real del mundo. Con el ejemplo cada vez que desee un nuevo elemento, se lo redirecciona a la vista Crear, que está bien; sin embargo, en lugar de volver a hacer una publicación de página completa, quiero utilizar el jquery.dialog para abrir un menú emergente modal que permita al usuario para insertar un nuevo elementoCargando una vista parcial en jquery.dialog

Hasta ahora he

<script type="text/javascript"> 

    $(function() { 

     $('#dialog').dialog({ 
      autoOpen: false, 
      width: 400, 
      resizable: false, 
      title: "hi there", 
      modal: true, 
      buttons: { 
       "Close": function() { 
        $(this).dialog("close"); 
       } 
      } 
     }); 
     $('#my-button').click(function() { 
     $('#dialog').dialog('open'); 
     });}); </script> 

    <div id="dialog" title="Create Album" style="overflow: hidden;"> 
    @Html.Partial("_CreateAlbumPartial")</div> 

Problemas con esta es la vista parcial se carga cada vez que no a través de ajax y yo no sé realmente donde debería estar poniendo la vista parcial. ¿Debería estar en la ubicación compartida o en la carpeta con las otras vistas? ¿Cómo actualizo la clase del controlador para adaptarme a la vista parcial?

Lo siento si estos son fáciles de hacer, im 3 días en MVC :)

+0

publicado un enfoque alternativo aquí: http://stackoverflow.com/questions/10759742/load-and-edit-data-in-jquery-ui-dialog/10763559#10763559 –

Respuesta

78

Pruebe algo como esto:

<script type="text/javascript"> 
    $(function() { 
     $('#dialog').dialog({ 
      autoOpen: false, 
      width: 400, 
      resizable: false, 
      title: 'hi there', 
      modal: true, 
      open: function(event, ui) { 
       //Load the CreateAlbumPartial action which will return 
       // the partial view _CreateAlbumPartial 
       $(this).load("@Url.Action("CreateAlbumPartial")"); 
      }, 
      buttons: { 
       "Close": function() { 
        $(this).dialog("close"); 
       } 
      } 
     }); 

     $('#my-button').click(function() { 
      $('#dialog').dialog('open'); 
     }); 
    }); 
</script> 
<div id="dialog" title="Create Album" style="overflow: hidden;"> 

se utilizó la función de apertura que se activa cuando se abre el cuadro de diálogo y en el interior enviamos una petición AJAX a una acción de controlador que devolver el parcial:

public ActionResult CreateAlbumPartial() 
{ 
    return View("_CreateAlbumPartial"); 
} 
+1

Gracias Darin, ¿por qué Cómo se aplica el estilo _layout.cshtml a la vista parcial? Pensé que estaban destinados a ser como un usuario de control asp.net? ¿También está bien usar @ Url.Content cuando la vista está en una carpeta diferente? vivas de nuevo por tu ayuda –

+2

@ user293545, podrías deshabilitar esto poniendo: '@ {Layout = null; } 'dentro de su parcial o al devolver' PartialView ("_ CreateAlbumPartial") 'dentro de su acción de controlador –

+0

Impresionante, todo se inicia lentamente:) ¿tiene algún método problemas de rendimiento? o ambos son similares –

9

para mejorar la respuesta Darin, podemos mover el código div carga en el evento de clic de botón. De esta forma, todos los alghorithms de posición del diálogo funcionan en el nuevo texto, por lo que el diálogo se coloca correctamente.

<script type="text/javascript"> 
    $(function() { 
     $('#dialog').dialog({ 
      autoOpen: false, 
      width: 400, 
      resizable: false, 
      title: 'hi there', 
      modal: true,   
      buttons: { 
       "Close": function() { 
        $(this).dialog("close"); 
       } 
      } 
     }); 

     $('#my-button').click(function() { 
      //Load the CreateAlbumPartial action which will return 
      // the partial view _CreateAlbumPartial 
      $('#dialog').load("@Url.Action("CreateAlbumPartial")", 
        function (response, status, xhr) { 
         $('#dialog').dialog('open'); 
        }); 
     }); 
    }); 
</script> 
<div id="dialog" title="Create Album" style="overflow: hidden;"> 
+1

Esto está cerca debe leer con la respuesta aceptada :) – TechnicalSmile

Cuestiones relacionadas