Retrieve Dot Net Nuke Custom Module Settings

If you’re creating custom modules for DotNetNuke you’ve certainly tried to add your own settings to the settings.ascx in the default module setup.

Creating your settings happens in 5 steps. Where ever you see “settingname” replace with your setting’s name:

1) Add the html to the Settings.ascx file like this (the formatting doesn’t matter; customize to fit your site

<table>
  <tr>
    <td>
       <dnn:Label ID="lblSettingName" runat="server"
        ControlName="txtSettingName Suffix=":"></dnn:Label>
    </td>
    <td>
       <asp:TextBox ID="txtEventModuleLink" CssClass="NormalTextBox"
        Width="350" runat="server" />
    </td>
  </tr>
</table>

2) Add code to the Settings.ascx.vb to load the value for the setting into the textbox created in step one.  Do not worry that the setting doesn’t actually have a value yet.

Public Overrides Sub LoadSettings()
  Try
    If (Page.IsPostBack = False) Then
      If CType(TabModuleSettings("settingname"), String) _
             <> "" Then
        txtSettingName.Text = _
             CType(TabModuleSettings("settingname"), String)
      End If
    End If
  Catch exc As Exception           'Module failed to load
    ProcessModuleLoadException(Me, exc)
  End Try
End Sub

3) Add code to the Settings.ascx.vb to save the value from textbox created in step one.

Public Overrides Sub UpdateSettings()
  Try
    Dim objModules As New Entities.Modules.ModuleController

    objModules.UpdateTabModuleSetting(TabModuleId, "settingname" _
      , txtSettingName.Text)

    ' refresh cache
    Entities.Modules.ModuleController.SynchronizeModule(ModuleId)

  Catch exc As Exception           'Module failed to load
    ProcessModuleLoadException(Me, exc)
  End Try
End Sub

That completes the code to Edit and Save the custom setting.  Now you’ll want to retrieve that setting in your module.

4) In your user control (eg View_ModuleName.ascx, Edit_ModuleName.ascx), whether it’s the View, Edit, or another custom control, create a module level variable for the setting.  In this case we’ve created a string, but you can “ctype” the variable into whatever type you need.

Private mSettingName As String = Common.Utilities.Null.NullString

5) Get the value of the setting and assign it to the module level variable mSettingName.  This code should be placed in the Page Load event.  Normally, it will assigned whether the page is in postback, or not.

If CType(Settings("settingname"), String) <> "" Then
  mSettingName= CType(Settings("settingname"), String)
End If

The variable is now available to the entire user control (eg Edit_ModuleName.ascx.vb).

Leave a Reply