2011-01-26 3 views
43

Я совершенно новый для mvc и пытаюсь создать фиктивное приложение для изучения mvc 3. Я проработал свой путь через пример музыкального магазина, и теперь я пытаюсь его немного расширить в более реальное приложение мира. С примером, когда вы хотите, чтобы какой-либо новый элемент был перенаправлен на Create, но это хорошо, но я хочу вместо того, чтобы делать полный пост страницы назад. Я хочу использовать jquery.dialog для открытия модального всплывающего окна, которое позволит пользователю для вставки нового элемента.Загрузка частичного представления в jquery.dialog

до сих пор у меня есть

<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> 

Проблемы с этим является частичный вид загружается каждый раз, а не через AJAX, и я действительно не знаю, где я должен поместить частичный вид. Shoukld он находится в общем местоположении или в папке с другими видами? Как обновить класс контроллера для частичного просмотра?

Извините, если это легко сделать, им 3 дня в Mvc :)

+0

Добавлено альтернативный подход здесь: http://stackoverflow.com/questions/10759742/load-and-edit-data-in-jquery-ui-dialog/10763559#10763559 –

ответ

78

Попробуйте что-то вроде этого:

<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;"> 

Мы использовали открытую функцию, которая срабатывает при открытии диалога и внутри мы посылаем запрос AJAX к действию контроллера, который будет возвращать парциальный:

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

Спасибо Дарина, почему применяется ли стиль _layout.cshtml к частичному представлению? Я думал, что они должны быть похожими на пользовательский контроль asp.net? IS также нормально использовать @ Url.Content, когда представление находится в другой папке? снова приветствует вашу помощь –

+2

@ user293545, вы можете отключить это, поставив: '@ {Layout = null; } 'внутри вашего частичного или путем возврата' PartialView ("_ CreateAlbumPartial") 'внутри действия вашего контроллера –

+0

Удивительно, что все его приближение медленно:) У любого метода есть какие-либо проблемы с производительностью? или они оба похожи –

9

Чтобы улучшить Дарин ответ, мы можем переместить код ДИВОЙ загрузки в случае нажатия кнопки. Таким образом, алгоритмы диалога всех положений диалогового окна работают над новым текстом, поэтому диалог устанавливается правильно.

<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

Это рядом должно читать с принятым ответом :) – TechnicalSmile

Смежные вопросы