2009-08-16 25 views
5

Trên trang của tôi, tôi đã kiểm soát dùng sau:ASP.NET và jQuery thoại

<div class="editFormDialog" style="display: none; font-size: 12px;"> 
    <mm:Form ID="editUC" ShowCreateButton="false" ShowEditButton="true" runat="server" /> 
</div> 

UC này có tài sản công cộng mà phải mất một DataSet, và cập nhật một số lĩnh vực trong UC.

Vì vậy, khi tôi nhấn một nút trên trang của mình, nó gọi thuộc tính này trên UC và UC được cập nhật dữ liệu từ DataSet.

Cho đến nay rất tốt. Vấn đề nảy sinh khi tôi muốn UC trở thành một Hộp thoại Giao diện người dùng jQuery.

Trước tiên tôi tạo ra hộp thoại:

$(document).ready(function() { 
    $('.editFormDialog').dialog({ 
     autoOpen: false, 
     height: 700, 
     width: 780, 
     modal: true, 
     bgiframe: true, 
     title: 'Rediger', 
     open: function(type, data) { 
      $(this).parent().appendTo("form"); 
      $(this).css('display', 'block'); 
     } 
    }); 
}); 

Và tôi wan't nó để mở trên một nút nhấn (điều này không phải là một nút ASP.NET, HTML đơn giản):

$('#btnEdit').live('click', function() { 
    $('.editFormDialog').dialog('open'); 
}); 

Hộp thoại mở ra, nhưng UC không chứa dữ liệu chính xác. Khi tải trang, UC được cập nhật với dữ liệu mặc định. Sau đó, người dùng nhấp vào một nút và dữ liệu thay đổi nhưng UC không được cập nhật. Nó vẫn chứa dữ liệu mặc định. Đó chính là vấn đề.

Bạn có biết tại sao không?

Trợ giúp sẽ được nhiều người đánh giá cao!

Trả lời

1

Chính xác điều gì xảy ra khi bạn "gọi thuộc tính" (tôi cho rằng đó là phương thức)? Trang có thực hiện đăng lại không? Nếu đó là trường hợp, có thể postback đang bị chặn bằng cách nào đó khi bạn trộn jQuery vào kịch bản?

+0

Tôi nhấp vào nút để nhận dữ liệu tiếp theo. Một postback xảy ra. Thuộc tính trong UC được thiết lập như "editUC.EditData = ds;".Trang đi kèm với dữ liệu mới. Bây giờ khi tôi nhấp vào một nút khác mà làm cho hộp thoại bật lên, UC vẫn chứa dữ liệu mặc định. Giống như nó đã không đăng ký những thay đổi trong nguồn dữ liệu của nó. Nhưng nếu tôi hiển thị UC bên ngoài hộp thoại, nó hoạt động hoàn hảo. –

+0

Điều đó nghe có vẻ lạ: Bạn có thể đăng thêm một số mã nguồn của mình không? –

+0

Tất cả được đặt trong bảng điều khiển cập nhật. Có thể nào khi tôi tạo hộp thoại, "di chuyển ra ngoài" bảng điều khiển cập nhật không? Có lẽ một giải pháp khác có thể là tạo hộp thoại mỗi khi nó được mở ra và sau đó gỡ bỏ nó khi nó đang đóng cửa? Tất nhiên đặt các phần tử html vào đúng vị trí. Nhưng làm thế nào tôi có thể làm điều đó? –

0

Vì bạn đang sử dụng Bảng cập nhật, bạn đang tiêm cú pháp gọi javascript vào trang như thế nào? Tôi hỏi, bởi vì chỉ có một cách làm việc đúng trên một phần postbacks: ScriptManager.RegisterStartupScript(). Điều đó cho phép mã javascript hoạt động như thể trang đã được tải. Tất nhiên bất kỳ javascript onload khác có thể được gọi là quá, có thể dẫn đến hành vi bạn đang nhìn thấy.

Vì vậy,

  1. chắc chắn rằng javascript của bạn được tiêm với người quản lý kịch bản.
  2. đảm bảo chỉ các bit của javascript mà bạn muốn thực hiện sau một postback một phần được thực hiện

Ngoài ra còn có khả năng quay UC của bạn trong một điều khiển ajax với một dịch vụ web để thay đổi nguồn dữ liệu . Không còn đăng lại một phần nữa, thường cải thiện khả năng phản hồi của trang.

2

Tôi đã tìm ra giải pháp cho vấn đề này. Nó chỉ ra rằng khi bạn thêm vào các biểu mẫu, bạn cần chắc chắn rằng đoạn mã này là bên trong tài liệu jquery sẵn sàng:

$("#dialog1").parent().appendTo($("form:first")); 

Vì vậy, toàn bộ điều nên xem xét như thế này:

jQuery(document).ready(function() { 
    $("#<%=myFamilyGrid.ClientID %>").tablesorter({ 
     sortList: [[0, 1]] 
    }) 
     .tablesorterPager({ container: $("#pager") }); 


    $("#dialog1").dialog({ 
     modal: true, 
     height: 370, 
     width: "350px", 
     autoOpen: false, 
     bgiframe: false, 
     zIndex: 3999 
    }); 

    $("#dialog1").parent().appendTo($("form:first")); 
}); 

Hope điều này có ích!

Các vấn đề liên quan