Содержимое файла следует заменить следующим кодом:
Imports System
Imports System.Collections.Generic
Imports System.Configuration
Imports System.ComponentModel
Imports System.Data
Imports System.Xml
Imports System.Web
Imports DotNetNuke
Imports DotNetNuke.Common
Imports DotNetNuke.Common.Utilities
Imports DotNetNuke.Entities.Modules
Imports DotNetNuke.Services.Search
Namespace YourCompany.Modules.GuestBook Public Class GuestBookController
<DataObj ectMethod(DataObjectMethodType.Insert)>
Public Shared Sub GuestBook Insert(ByVal objTest As GuestBookInfo)
End Namespace
Этот код создает класс с четырьмя методами(рис. 15.26): 1. GuestBook_Insert - Добавляет записи в БД. Используется объект GuestBookInfo. Параметры ModuleId, Name, Email, Message передаются методу YourCompany_GuestBook_Insert в файле DataProvider. vb
2. GuestBook_Delete - Удаляет записи из БД. Используется объект GuestBookInfo. Параметр ID передается методу YourCompany_GuestBook_Delete в файле DataProvider.vb.
3. GuestBook_GetAll - получает набор записей из БД. Используется параметр ModuleId. Этот метод вызывает метод YourCompany_GuestBook_GetAll в файле DataProvider.vb и возвращает объект GuestBookInfo, заполненный данными.
4. GuestBook_Update - обновляет БД. Используется объект GuestBookInfo. Метод открывает объект и передает отдельные параметры (ID, ModuleId, Name, Email, Message, DateEntered) методу YourCompany_GuestBook_Update в файле DataProvider.vb".
Технология локализации, используемая в DNN, позволяет создавать текстовые метки с возможностью изменения текста при переключении языка. Это достигается путем изменения файла ресурсов, который имеет расширение .resx.
Откройте файл /DesktopModules/GuestBook/App_LocalResources/EditGuestBook.ascx.resx(рис. 15.27).
. 15.27. Исходное содержимое файла EditGuestBook.ascx.resx.
Измените содержимое файла таким образом, чтобы оно соответствовалорис. 15.28.
. 15.28. Измененное содержимое файла EditGuestBook.ascx.resx. Откройте файл Settings.ascx.resx(рис. 15.29).
. 15.29. Исходное содержимое файла Settings.ascx.resx
Следует изменить его содержимое таким образом, чтобы оно соответствовало приведенному нарис. 15.30.
. 15.30. Измененное содержимое файла Settings.ascx.resx Аналогично, следует заменить содержимое файла ресурсов ViewGuestBook.ascx.resx на следующее(рис. 15.31).
. 15.31. Измененное содержимое файла ViewGuestBook.ascx.resx
Модуль состоит из трех элементов управления: 1. EditGuestBook.ascx и EditGuestBook.ascx.vb
2. Settings.ascx и Settings.ascx.vb
3. ViewGuestBook.ascx и ViewGuestBook.ascx.vb В контекстном меню файла EditGuestBook.ascx выберите пункт View Markup(рис. 15.32).
. 15.32. Контекстное меню файла EditGuestBook.ascx Замените код элемента управления на следующий:
<%@ Control language="VB"
Inherits="YourCompany.Modules.GuestBook.EditGuestBook" CodeFile="EditGuestBook.ascx.vb" AutoEventWireup="true"%>
<%@ Register TagPrefix="dnn" TagName="Label" Src="~/controls/LabelControl.ascx" %>
<dnn:label id="lblContent" runat="server" controlname="lblContent" suffix=":"></dnn:label>
<asp:ObjectDataSource ID="ObjectDataSource Tasks" runat="server"
DataObj ectTypeName="YourCompany.Modules.GuestBook.GuestBookInfo" DeleteMethod="GuestBook Delete" InsertMethod="GuestBook Insert" OldValuesParameterFormatString="original {0}"
OnInit="Page Load" SelectMethod="GuestBook GetAll"
TypeName="YourCompany.Modules.GuestBook.GuestBookController" UpdateMethod="GuestBook Update">
<SelectParameters>
<asp:Parameter DefaultValue="00" Name="ModuleId" Type="Int32" /> </SelectParameters>
</asp:ObjectDataSource>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AutoGenerateColumns="False" DataSourceID="ObjectDataSource Tasks" DataKeyNames="ID">
<Columns>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" /> <asp:BoundField DataField="ID" HeaderText="ID" Visible="False" /> <asp:BoundField DataField="ModuleID" HeaderText="ModuleID" Visible="False" />
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name"
/>
<asp:BoundField DataField="Message" HeaderText="Message" SortExpression="Message" />
<asp:BoundField DataField="Email" HeaderText="Email" />
<asp:BoundField ApplyFormatInEditMode="True" DataField="DateEntered" DataFormatString="{0:d}"
HeaderText="Date" HtmlEncode="False" SortExpression="DateEntered" /> </Columns>
</asp:GridView> <asp:BoundField ApplyFormatInEditMode="True" DataField="DateEntered"
DataFormatString="{0:d}"
HeaderText="Date" HtmlEncode="False" SortExpression="DateEntered" /> </Columns>
</asp:GridView> Проделайте аналогичную процедуру с файлом Settings.ascx, заменив его разметку на следующую:
<%@ Control Language="VB" AutoEventWireup="false"
CodeFile="Settings.ascx.vb"
Inherits="YourCompany.Modules.GuestBook.Settings" %>
<%@ Register TagPrefix="dnn" TagName="Label"
Src="~/controls/LabelControl.ascx" %>
<dnn:label id="lblshowform" runat="server" controlname="lblshowform" suffix=":"></dnn:label>
<br />
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
<asp:ListItem Selected="True">Yes</asp:ListItem>
<asp:ListItem>No</asp:ListItem>
</asp:DropDownList> То же самое следует проделать с разметкой файла ViewGuestBook.ascx, заменив ее на следующую:
<%@ Control Language="VB"
Inherits="YourCompany.Modules.GuestBook.ViewGuestBook"
CodeFile="ViewGuestBook.ascx.vb"
AutoEventWireup="true" %>
<%@ Register TagPrefix="dnn" TagName="Label"
Src="~/controls/LabelControl.ascx" %>
<asp:ObjectDataSource ID="ObjectDataSource Tasks" runat="server"
DataObj ectTypeName="YourCompany.Modules.GuestBook.GuestBookInfo" DeleteMethod="GuestBook Delete" InsertMethod="GuestBook Insert" OldValuesParameterFormatString="original {0}"
SelectMethod="GuestBook GetAll"
TypeName="YourCompany.Modules.GuestBook.GuestBookController" UpdateMethod="GuestBook Update" OnInit="Page Load">
<SelectParameters>
<asp:Parameter DefaultValue="00" Name="ModuleId" Type="Int32" /> </SelectParameters>
</asp:ObjectDataSource>
<asp:GridView ID="GridView1" runat="server"
DataSourceID="ObjectDataSource Tasks"
AutoGenerateColumns="False" AllowPaging="True" HorizontalAlign="Center"> <Columns>
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name"
/>
<asp:BoundField DataField="Message" HeaderText="Message" SortExpression="Message" />
<asp:BoundField ApplyFormatInEditMode="True" DataField="DateEntered" DataFormatString="{0:d}"
HeaderText="Date" SortExpression="DateEntered" HtmlEncode="False" /> </Columns>
<EmptyDataTemplate>
There are no entries.
</EmptyDataTemplate>
</asp:GridView>
<br />
<center>
<dnn:Label ID="lblAddMessage" runat="server" ControlName="lblAddMessage" Suffix=":">
</dnn:Label>
</center>
<br />
<asp:FormView ID="FormView1" runat="server"
DataSourceID="ObjectDataSource Tasks"
DefaultMode="Insert" HorizontalAlign="Center">
<InsertItemTemplate>
<table cellpadding="2" cellspacing="5" style="width: 50%" align="center"> <tr>
<td align="right" style="width: 4px">
<asp:Label ID="Label1" runat="server" Text="Name"></asp:Label></td>
<td style="width: 100px">
<asp:TextBox ID="NameTextBox" runat="server"
Text='<%# Bind("Name") %>' Width="2 64px"></asp:TextBox></td>
</tr>
<tr>
<td align="right" style="width: 4px; height: 23px">
<asp:Label ID="Label3" runat="server" Text="Email"></asp:Label></td> <td style="width: 100px; height: 23px">
<asp:TextBox ID="EmailTextBox" runat="server"
Text='<%# Bind("Email") %>' Width="2 64px"></asp:TextBox></td>
</tr>
<tr>
<td align="right" style="width: 4px; height: 21px">
<asp:Label ID="Label2" runat="server"
Text="Message"></asp:Label></td>
<td style="width: 100px; height: 21px">
<asp:TextBox ID="MessageTextBox" runat="server"
EnableViewState="False"
MaxLength="250" Rows="2" Text='<%# Bind("Message") %>'
TextMode="MultiLine" Width="2 64px"></asp:TextBox></td>
</tr>
<tr>
<td align="right" colspan="2" style="height: 21px">
<asp:Button ID="InsertButton" runat="server" Text="Submit" CommandName="Insert" /></td>
</tr>
</table>
<br />
</InsertItemTemplate>
</asp:FormView> Пример 15.3. (html,txt) Далее следует в контекстном меню файла EditGuestBook.ascx выбрать пункт View Code(рис. 15.33).
. 15.33. Контекстное меню файла EditGuestBook.ascx Открывшийся код следует заменить на следующий:
Imports DotNetNuke
Imports System.Web.UI
Imports System.Collections.Generic
Imports System.Reflection
Imports DotNetNuke.Entities.Modules
Namespace YourCompany.Modules.GuestBook Partial Class EditGuestBook Inherits PortalModuleBase
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Try
Catch exc As Exception
Exceptions.ProcessModuleLoadException(Me, exc)
End Try End Sub
Protected Sub SetModuleId(ByVal sender As Object,
ByVal e As System.Web.UI.WebControls.ObjectDataSourceSelectingEventArgs)
Handles ObjectDataSource Tasks.Selecting e.InputParameters("ModuleId") = ModuleId.ToString End Sub End Class End Namespace
Код файла Settings.ascx необходимо заменить на следующий:
Imports System Imports System.Web.UI Imports DotNetNuke
Imports DotNetNuke.Entities.Modules Imports DotNetNuke.Services.Exceptions Namespace YourCompany.Modules.GuestBook
Partial Class Settings
Inherits ModuleSettingsBase Public Overrides Sub LoadSettings()
Try
If (Page.IsPostBack = False) Then
If (Not (CType(TabModuleSettings("showform"), String)) Is Nothing)
Then
Me.DropDownList1.SelectedValue =
CType(TabModuleSettings("showform"), String)
End If End If Catch exc As Exception
Exceptions.ProcessModuleLoadException(Me, exc)
End Try End Sub
Protected Sub DropDownList1 SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim objModules As ModuleController = New ModuleController If (Me.DropDownList1.SelectedValue = "Yes") Then
objModules.UpdateTabModuleSetting(TabModuleId, "showform", "Yes")
Else
objModules.UpdateTabModuleSetting(TabModuleId, "showform", "No")
End If End Sub End Class End Namespace
Аналогично ниже приведен код для файла ViewGuestBook.ascx:
Imports DotNetNuke Imports System.Web.UI Imports System.Collections.Generic Imports System.Reflection Imports DotNetNuke.Entities.Modules Namespace YourCompany.Modules.GuestBook Partial Class ViewGuestBook
Inherits Entities.Modules.PortalModuleBase Implements Entities.Modules.IActionable Public Readonly Property ModuleActions() As Entities.Modules.Actions.ModuleActionCollection
Implements
Entities.Modules.IActionable.ModuleActions Get
Dim Actions As New Entities.Modules.Actions.ModuleActionCollection Actions.Add(GetNextActionID,
Localization.GetString(Entities.Modules.Actions.ModuleActionType.EditContent, LocalResourceFile),
Entities.Modules.Actions.ModuleActionType.EditContent,
"", "", EditUrl(), False, Security.SecurityAccessLevel.Edit,
True, False)
Return Actions End Get End Property
Protected Sub Page Load(ByVal sender As Object, ByVal e As System.EventArgs)
Try
Dim objModules As ModuleController = New ModuleController If Not Page.IsPostBack Then
If (Not (CType(Settings("showform"), String)) Is Nothing) Then If (CType(Settings("showform"), String) = "No") Then
После того, как все три уровня модуля разработаны, следует выбрать пункт главного меню Visual Studio Build Build Web Site. Компиляция должна пройти без ошибок. После компиляции следует запустить проект, и в меню DNN выбрать страницу Guest Book. Появится созданный модуль(рис. 15.34).
15.34. Созданный модуль GuestBook
⇐Dataprovider.vb | Введение в технологии создания Интернет-узлов | Dnn⇒