2011-01-26 5 views
43

Tôi là người hoàn toàn mới với mvc và cố gắng tạo một ứng dụng giả để tìm hiểu mvc 3. Tôi đã làm việc theo cách của mình thông qua ví dụ cửa hàng âm nhạc và giờ tôi đang cố gắng mở rộng vào một ứng dụng thực tế hơn. Với ví dụ bất cứ khi nào bạn muốn bất kỳ mục mới nào bạn được chuyển hướng đến chế độ xem Tạo tốt nhưng tôi muốn thay vì làm một bài đăng đầy đủ, tôi muốn sử dụng jquery.dialog để mở cửa sổ bật lên phương thức cho phép người dùng để chèn một mục mới.Tải một phần xem trong jquery.dialog

cho đến nay tôi có

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

vấn đề với điều này là quan điểm từng phần được nạp mỗi lần không thông qua ajax và tôi thực sự không biết nơi tôi nên đặt quan điểm một phần. Shoukld nó ở trong vị trí được chia sẻ hoặc trong thư mục với các chế độ xem khác? Làm cách nào để cập nhật lớp trình điều khiển để phục vụ cho chế độ xem một phần?

Xin lỗi nếu đây là dễ dàng để làm, im 3 ngày vào :) MVC

+0

văn một cách tiếp cận khác ở đây: http://stackoverflow.com/questions/10759742/load-and-edit-data-in-jquery-ui-dialog/10763559#10763559 –

Trả lời

78

Hãy thử một cái gì đó như thế này:

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

Chúng tôi sử dụng các chức năng mở mà được kích hoạt khi hộp thoại được mở ra và bên trong chúng tôi gửi yêu cầu AJAX đến một hành động điều khiển sẽ trả về một phần:

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

Cảm ơn Darin, tại sao kiểu _layout.cshtml được áp dụng cho chế độ xem từng phần? Tôi nghĩ rằng họ đã có nghĩa là để được giống như một usercontrol asp.net? IS nó cũng ok để sử dụng @ Url.Content khi xem là trong một thư mục khác nhau? cổ vũ lần nữa vì sự giúp đỡ của bạn –

+2

@ user293545, bạn có thể vô hiệu hóa điều này bằng cách đặt: '@ {Layout = null; } 'bên trong một phần của bạn hoặc bằng cách trả về' PartialView ("_ CreateAlbumPartial") 'bên trong hành động điều khiển của bạn –

+0

Tuyệt vời tất cả các togeather sắp tới của nó từ từ:) phương thức nào có bất kỳ vấn đề hiệu năng nào không? hoặc cả hai đều giống nhau –

9

Để cải thiện câu trả lời của Darin, chúng tôi có thể di chuyển mã tải div trong sự kiện nhấp nút. Bằng cách này, tất cả các alghorithms của vị trí của hộp thoại hoạt động trên văn bản mới và do đó hộp thoại được đặt chính xác.

<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

Đây là gần phải đọc với câu trả lời được chấp nhận :) – TechnicalSmile