DotNetNuke 4.5 - Now Support ASP .NET AJAX !
Wuih... ternyata adaptasi fitur baru seiring dengan peningkatan kemampuan DotNetNuke Framework semakin mantap saja. Jika dahulu developer harus ber-tips dan trik untuk bisa menggunakan fitur ASP .NET AJAX, kini fitur tersebut sudah tersedia built-in di DotNetNuke versi 4.5 yang akan release.
Meski demikian, karena fitur ASP .NET AJAX ini berada di luar framework DotNetNuke (terinstall secara terpisah dan dapat Anda download dari situs resmi Microsoft (http://ajax.asp.net/) ), maka DotNetNuke Framework tidak dapat mengasumsikan bahwa web server Anda yang sedang running telah terpasang ASP .NET AJAX. Nah, untuk menangani masalah ini, sebuah kelas baru telah dibuat di dalam DotNetNuke Framework dengan nama DotNetNuke.Framework.AJAX dimana kelas ini menyediakan method-method yang diperlukan oleh developer agar dapat mengintegrasikan AJAX pada solusi mereka.


Setting Dependencies
Salah satu pilihan dalam mendevelop sebuah module DotNetNuke berbasis AJAX adalah kemampuan untuk mengindikasikan adanya System.Web.UI.ScripitManager. Hal ini sekarang sudah bisa dilakukan secara mudah pada module configuration setting. Perhatikan, sekarang di module configuration setting ada tambahan fitur yang disebut dengan Module Dependencies :

Module-module sekarang sudah dapat menspesifikasikan daftar yang dibatasi oleh tanda titik koma yang berisi ketergantungan suatu module terhadap suatu komponen apa saja. Contoh diatas mengindikasikan bahwa module ada dependencies dengan komponen AJAX framework (sebagai contoh, indikasi penggunaan System.Web.UI.ScriptManager berarti module Anda mengharuskan ASP .NET AJAX terinstall dan running dengan baik). Kemudian, pada saat instalasi module, jika lingkungan server tidak mendukung hak khusus, sebuah pesan akan ditampilkan kepada user dan module tidak akan bisa diinstal. Nice !

IsInstalled and IsEnabled
Jika Anda ingin menggunakan fungsionalitas ASP .NET AJAX *hanya* jika fitur ini telah tersedia di mesin Anda, maka Anda dapat memutuskan untuk tidak menggunakan fitur Dependency dan menggunakan fungsi IsInstalled dan IsEnabled.
IsInstalled berfungsi untuk menguji apakah AJAX tersedia di lingkungan mesin Anda, dan IsEnabled berfungsi untuk memberitahukan kepada DotNetNuke bahwa fitur AJAX di dalamnya akan digunakan.
IsInstalled
Fungsi IsInstalled sangat mudah untuk digunakan dan dapat di cek sebelum fungsionalitas ASP .NET AJAX dipanggil. Fungsi ini akan mengembalikan nilai Boolean (true atau false)
DotNetNuke.Framework.AJAX.IsInstalled()
IsEnabled
Fungsi IsEnabled harus digunakan untuk memberitahu DotNetNuke bahwa module/skin tersebut menggunakan fitur AJAX pada halaman aktif.
DotNetNuke.Framework.AJAX.IsEnabled = True
Sample Aplikasi ASP .NET AJAX

Sample kode aplikasi tersebut dapat di download pada link ini. Sample hanya bisa berjalan dengan baik pada DotNetNuke 4.5.0 atau lebih tinggi. Sample module mendemonstrasikan dukungan penggunaan ASP .NET AJAX pada saat runtime.
Imports DotNetNuke
Imports System.Collections.Generic
Namespace DotNetNuke.Modules
Partial Class Ajax
Inherits Entities.Modules.PortalModuleBase
Dim CurrentPageIndex As Integer
Dim boolUsingAjax As Boolean = False
Protected Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If DotNetNuke.Framework.AJAX.IsInstalled() Then
If dllAjax.SelectedValue = "Using Ajax" Then
boolUsingAjax = True
Else
boolUsingAjax = False
End If
Else
boolUsingAjax = False
End If
If boolUsingAjax = True Then
DotNetNuke.Framework.AJAX.IsEnabled = True
Else
DotNetNuke.Framework.AJAX.UpdatePanelControl.Visible = False
End If
If Not Page.IsPostBack Then
ShowData(1)
End If
End Sub
Private Sub ShowData(ByVal intCurrentPageIndex As Integer)
Dim mySqlString As New StringBuilder()
mySqlString.Append("SELECT FriendlyName, Description ")
mySqlString.Append("FROM {databaseOwner}{objectQualifier}DesktopModules ")
mySqlString.Append("ORDER BY FriendlyName")
Dim colDesktopModules As New List(Of myDesktopModules)
Using dr As IDataReader = _
CType(DataProvider.Instance().ExecuteSQL(mySqlString.ToString(), Nothing), IDataReader)
While dr.Read
Dim objDesktopModules As New myDesktopModules()
objDesktopModules.FriendlyName = Convert.ToString(dr("FriendlyName"))
objDesktopModules.Description = Convert.ToString(dr("Description"))
colDesktopModules.Add(objDesktopModules)
End While
End Using
Dim pagedData As New PagedDataSource()
pagedData.DataSource = colDesktopModules
pagedData.AllowPaging = True
pagedData.PageSize = 10
pagedData.CurrentPageIndex = intCurrentPageIndex - 1
Me.lblTotalPages.Text = Convert.ToString(pagedData.PageCount)
Me.lblCurrentPage.Text = Convert.ToString(pagedData.CurrentPageIndex + 1)
If pagedData.IsFirstPage Then
btnPrevious.Visible = False
Else
btnPrevious.Visible = True
End If
If pagedData.IsLastPage Then
btnNext.Visible = False
Else
btnNext.Visible = True
End If
Me.GridView1.DataSource = pagedData
Me.GridView1.DataBind()
End Sub
Protected Sub Next_Click(ByVal sender As Object, ByVal e As System.EventArgs)
CurrentPageIndex = Convert.ToInt32(Me.lblCurrentPage.Text) + 1
ShowData(CurrentPageIndex)
End Sub
Protected Sub btnPrevious_Click(ByVal sender As Object, ByVal e As System.EventArgs)
CurrentPageIndex = Convert.ToInt32(Me.lblCurrentPage.Text) - 1
ShowData(CurrentPageIndex)
End Sub
End Class
Public Class myDesktopModules
Dim _FriendlyName As String
Dim _Description As String
Public Property FriendlyName() As String
Get
Return _FriendlyName
End Get
Set(ByVal value As String)
_FriendlyName = value
End Set
End Property
Public Property Description() As String
Get
Return _Description
End Get
Set(ByVal value As String)
_Description = value
End Set
End Property
End Class
End Namespace
The ASP.NET AJAX Partial Rendering Host Setting
Sebagai tambahan, pengaturan partial rendering pada level modul/skin kini dapat diaktifkan/nonaktifkan dengan mudah melalui menu Host Settings. Jadi, bagi Administrator yang mengizinkan pengembangan module yang menggunakan ASP .NET AJAX, aktifkan saja fitur ini. Fitur baru tersebut disebut Partial Rendering Enabled dan diletakkan pada bagian Performance Settings.

Cool !