2012-03-08 38 views
5

Tôi đang phát triển mô-đun DNN và tôi muốn hiển thị thông báo thông tin ở đầu Nội dung của tôi, không nằm phía trên mô-đun thực tế. Tôi đã thấy rằng DotNetNuke.UI.Skins.Skin.AddPageMessage() chỉ nên làm điều đó. Tôi không nhận được hành vi tôi muốn mặc dù, thông điệp sẽ không hiển thị chút nào.Làm thế nào để sử dụng phương thức Skin.AddPageMessage()?

Có một vài lần quá tải của phương pháp này, một nhóm chấp nhận đối tượng Page, một đối tượng khác lấy đối tượng Skin.

public static void AddPageMessage(Page page, string heading, string message, ModuleMessage.ModuleMessageType moduleMessageType) 

public static void AddPageMessage(Skin skin, string heading, string message, ModuleMessage.ModuleMessageType moduleMessageType) 

tôi đã có một cái nhìn vào nguồn DNN và phát hiện ra rằng cuối cùng họ đang thực sự sử dụng cùng một phương pháp private static AddPageMessage(...), mà chỉ tìm kiếm một ContentPane trong tầm kiểm soát cung cấp và bổ sung thêm một mới ModuleMessage đến bộ sưu tập các điều khiển của nó.

Tôi nên chuyển thông số nào thành thông số Page hoặc Skin để sửa lỗi này hoạt động?

Thanks ...

Trả lời

4

Phương pháp AddPageMessage tin mất khá mơ hồ "Control" là tham số đầu tiên. Tôi tin rằng cần phải là Skin hiện tại, vì nó là một FindControl cho ContentPane.

Làm một cái gì đó như thế này sẽ giúp bạn có một tham chiếu đến da hiện tại:

var skin = Skin.GetSkin((PageBase)this.Page); 
Skin.AddPageMessage(skin, "Header", "Message", ModuleMessageType.GreenSuccess); 
+0

cảm ơn câu trả lời của bạn, tôi đã thử cách bạn mô tả trước đây, nhưng tiếc là nó có vẻ không hoạt động. Tôi đã thử cả hai với giao diện mặc định và tùy chỉnh. Trong khi gỡ lỗi nguồn dnn, FindControl trên thực tế tìm thấy ContentPane, nhưng bộ sưu tập Controls của nó trống (không nên, vì ít nhất phải có module của tôi) và sau khi thêm một đối tượng ModuleMessage mới vào bộ sưu tập không có gì xảy ra và không có thông báo được hiển thị trên trang. Bất kỳ ý tưởng? –

+0

Hmm, tôi cũng thấy điều tương tự. Kỳ dị. Tôi không hoàn toàn chắc chắn tại sao điều đó lại xảy ra vào lúc này. –

+0

Một số bằng chứng khác ... phương pháp IS đang hoạt động để thêm thông báo "Thử nghiệm DNN Pro". Nhưng khi tôi tự gọi nó là nó không hiển thị trong giao diện người dùng, mặc dù nó tìm thấy ContentPane ... –

1

lý do tại sao các tin nhắn không hiển thị lên là bạn bật "cho phép vẽ một phần" trong controlssetting của modulecontrols .

Nếu bạn đang sử dụng AJAX (điều này xảy ra nếu bạn đặt hiển thị một phần thành đúng), mô-đun DNN được tắt khỏi chính DNN.

Đủ nếu bạn đã bật hiển thị một phần trên chỉ 1 điều khiển (không phải là quyền kiểm soát của bạn nơi bạn đang hành động) trên trang của bạn. DNN sẽ bọc toàn bộ trang vào trình quản lý tập lệnh ajax và thư không hoạt động nữa.

* EDIT 2012/04/26 10:45:

Bạn có thể lấy ScriptManager hiện tại bằng cách thực hiện Bộ luật sau đây ví dụ như trong bạn Page_Load(). Nếu người quản lý là null, bạn không bật ajax và các mô-đun sẽ hoạt động. Nếu bIsAjaxEnabled đúng thì các mô-đun bị tắt.

ScriptManager manager = AJAX.GetScriptManager(Page); 
if (manager != null) 
{ 
    bool bIsAjaxEnabled = manager.SupportsPartialRendering; 
} 
+0

Làm thế nào tôi có thể chắc chắn rằng trang được bao bọc bởi trình quản lý tập lệnh ajax? Tôi chỉ có một trang đơn giản với một mô-đun trên đó, không có điều khiển mô-đun nào được bật hiển thị từng phần, có vẻ như không có trình quản lý tập lệnh ajax (nguồn trang đã chọn) nhưng thông báo trang vẫn không được hiển thị. Bất kỳ đầu mối? –

+0

Tôi đã chơi xung quanh với nó nhưng vẫn không thành công :(Sau khi kiểm tra cho SupportsPartialRendering, nó thực sự là sự thật ...Những gì tôi cũng đã làm là tôi nhìn vào nguồn DNN và phát hiện ra rằng ScriptManager đang được thêm vào mỗi trang (như một phương thức gọi trong phương thức DotNetNuke.Framework.PageBase.OnInit(), nơi mà ScriptManager được thêm vào mỗi trang) . Tôi đã bỏ qua một cái gì đó? –

+0

Có, trình quản lý tập lệnh đang được thêm vào mỗi trang. Nhưng nếu bạn bật "SupportPartialRendering" DNN (Phiên bản 6) sẽ thay thế ScriptManager bằng telerik ajaxScriptmanager. Từ đó trên AJAX được kích hoạt và điều này có nghĩa là các mô-đun không hoạt động nữa. Chỉ cần cố gắng thực hiện kiểm soát hoàn toàn trống trên trang được tạo mới. đặt một nút cho mô-đun hiển thị mô-đun nếu bạn nhấp vào. Thông thường nó sẽ hoạt động. – noonecares

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