VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > C#教程 >
  • c#开发DotnetNuke初试三

制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
 

  四,添加代码

  在本系列的第一篇中,我们先学习了建立数据库脚本,大家把那段代码拷贝到“~DesktopModulesFantom"文件夹下的“01.00.00.SqlDataProvider”文件中,把这个文件中原有的东西都去掉。

  在App_Code下的Fantom文件夹中建立两个类,一个是实体类"ArticleInfo.cs",另一个是实体操作类"ArticleController.cs"。其内容暂时先别管,先在此文件夹个的"DataProvider.cs"文件中的抽象方法(Abstract Method)中添加如下新方法:

    public abstract void AddArticle(string Title, string Content,DateTime CreateTime ,string Author);
    public abstract void DeleteArticle(int Id);
    public abstract void UpdateArticle(int Id, string Titlec, string Content,DateTime CreateTime ,string Author);
    public abstract IDataReader GetArticleById(int Id);
    public abstract IDataReader GetAll();

  然后在继承它的类"SqlDataProvider.cs"中实现这些抽象方法,代码如下:

         public override void AddArticle(string Title, string Content,DateTime CreateTime, string Author)
    {
      SqlHelper.ExecuteNonQuery(ConnectionString, GetFullyQualifiedName("F_ARTICLE_CREATE"), Title, Content,CreateTime, Author);
    }
    public override void DeleteArticle(int Id)
    {
      SqlHelper.ExecuteNonQuery(ConnectionString, GetFullyQualifiedName("F_ARTICLE_DELETE"), Id);
    }
    public override void UpdateArticle(int Id, string Titlec, string Content,DateTime CreateTime, string Author)
    {
      SqlHelper.ExecuteNonQuery(ConnectionString, GetFullyQualifiedName("F_ARTICLE_UPDATE"), Id, Titlec, Content,CreateTime, Author);
    }
    public override IDataReader GetArticleById(int Id)
    {
      return SqlHelper.ExecuteReader(ConnectionString, GetFullyQualifiedName("F_ARTICLE_GETDETAILS"), Id);//F_ARTICLE_GETDETAILS
    }
    public override IDataReader GetAll()
    {
      return SqlHelper.ExecuteReader(ConnectionString, GetFullyQualifiedName("F_ARTICLE_GETALL"));
    }

 

  回头再来看我们之前添加的类"ArticleInfo.cs",添加其代码如下:

     using System;
/**//// <summary>
/// ArticleInfo 的摘要说明
/// </summary>
namespace Fantom.Modules.MyModule
{
  public class ArticleInfo
  {
    private int _id;
    private string _title;
    private string _content;
    private DateTime _createTime;
    private string _author;
    public ArticleInfo()
    {
      //
      // TODO: 在此处添加构造函数逻辑
      //
    }
    public ArticleInfo(int id, string title, string content, DateTime createTime, string author)
    {
      _id = id;
      _title = title;
      _content = content;
      _author = author;
      _createTime = createTime;
    }
    public int Id
    {
      get { return _id; }
      set { _id = value; }
    }
    public string Title
    {
      get { return _title; }
      set { _title = value; }
    }
    public string Content
    {
      get { return _content; }
      set { _content = value; }
    }
    public DateTime CreateTime
    {
      get { return _createTime; }
      set { _createTime = value; }
    }
    public string Author
    {
      get { return _author; }
      set { _author = value; }
    }
  }
}
在类"ArticleController.cs"中写下如下代码:

 

  Code

1using System;
2using DotNetNuke;
3using DotNetNuke.Common;
4using DotNetNuke.Common.Utilities;
5using DotNetNuke.Entities.Modules;
6using DotNetNuke.Services.Search;
7using System.Collections.Generic;
8
9/**//// <summary>
10/// ArticleController 的摘要说明
11/// </summary>
12///
13namespace Fantom.Modules.MyModule
14{
15  public class ArticleController
16  {
17    public ArticleController()
18    {
19      //
20      // TODO: 在此处添加构造函数逻辑
21      //
22    }
23
24    Public Methods#region Public Methods
25    public static void AddArticle(ArticleInfo article)
26    {
27      DataProvider.Instance().AddArticle(article.Title, article.Content, article.CreateTime, article.Author);
28    }
29
30    public void DeleteArticle(int articleId)
31    {
32      DataProvider.Instance().DeleteArticle(articleId);
33    }
34
35    public void UpdateArticle(ArticleInfo article)
36    {
37      DataProvider.Instance().UpdateArticle(article.Id, article.Title, article.Content, article.CreateTime, article.Author);
38    }
39    public static ArticleInfo GetArticleById(int articleId)
40    {
41      return CBO.FillObject<ArticleInfo>(DataProvider.Instance().GetArticleById(articleId));
42    }
43    public static List<ArticleInfo> GetArticleAll()
44    {
45      return CBO.FillCollection<ArticleInfo>(DataProvider.Instance().GetAll());
46    }
47    #endregion
48  }
49}
在配置文件"MyModule.dnn"中我们可能看到,"App_code"文件夹下的类都在此注册一个,我们也照猫画虎,把我们自己写的类也在此注册如下:

 

         <file>
     <path>[app_code]</path>
     <name>ArticleController.cs</name>
    </file>
    <file>
     <path>[app_code]</path>
     <name>ArticleInfo.cs</name>
    </file>
到此为止,我们就短在用户界面上调用这些类中的方法来实现各种功能。这里我们主要用到ViewMyModule.ascx控件,打开这个控件,把源代码改成如下如示:

     <%@ Control language="C#" Inherits="Fantom.Modules.MyModule.ViewMyModule" CodeFile="ViewMyModule.ascx.cs" AutoEventWireup="true"%>
<asp:Panel ID="Panel1" runat="server" Height="295px" Width="399px"><div>
  Title:&nbsp; &nbsp;<br />
  <asp:TextBox ID="txtTitle" runat ="server" Width="100%"></asp:TextBox></div>
<div>
  Author:<asp:TextBox ID="txtAuthor" runat="server" Width="100%" ></asp:TextBox></div>
<div>
  Content:<asp:TextBox ID="txtContent" runat="server" Height="234px" Width="100%" TextMode="MultiLine"></asp:TextBox></div><div><asp:Button ID="btnAdd" Text="Add" runat="server" Width="59px" OnClick="btnAdd_Click" /></div>
</asp:Panel><hr />

 

  最后在"ViewMyModule.ascx.cs"文件中添加"btnAdd"的代码,实现添加文章功能。代码如下:

     protected void btnAdd_Click(object sender, EventArgs e)
    {
      try
      {
        string title = this.txtTitle.Text.Trim();
        string content = this.txtContent.Text.Trim();
        string author = this.txtAuthor.Text.Trim();
        DateTime createTime = DateTime.Now;
        ArticleInfo ai = new ArticleInfo();
        ai.Title = title;
        ai.Content = content;
        ai.Author = author;
        ai.CreateTime = createTime;
        ArticleController.AddArticle(ai);
        this.txtTitle.Text = "";
        this.txtContent.Text = "";
        Response.Write("<script>alert('添加成功!')</script>");
      }
      catch (Exception exe)
      {
        Response.Write("<script>alert('添加失败,原因是:'"+ exe.Message+")</script>" );
      }
    }

  大家运行一下,如果没有编译错误的就对了。到最后还要大家改动两个地方,大家照猫画虎,先改了,有兴趣的话可以研究一下。一个是"DataProvider.cs"中找到objProvider = (DataProvider)Reflection.CreateObject("data", "YourCompany.Modules.MyModule", "");把"YourCompany"改成"Fantom"(要是提高改了更好),还有一处是把"SqlDataProvider.cs“文件中的"private const string ModuleQualifier"的值改为空("")。

 

  五,压缩上传

  压缩要"zip"格式的,把整个项目压缩成Fantom.zip.然后在DNN的"主机管理"下的"模块定义"中选择"上传新模块",把刚刚压缩的Fantom.zip上传。

  返回"模块定义"页面,选择MyModule模块前的编辑按钮,进入编辑页面,把三个控件的路径改成"DesktopModules/Fantom.MyModule/Fantom/DesktopModules/Fantom/“(如ViewMyModule.ascx的路径就为:DesktopModules/Fantom.MyModule/Fantom/DesktopModules/Fantom/ViewMyModule.ascx).

  到此为止,所有的一切都做好了,就剩下在页面中添加这个控件了。至于添加和试用控件这里我就不再多说废话了,大家去试试吧。添加成功后要弹出一个对话框说明添加成功,但我这头的DNN弹出的是四个乱码字符加一个叹号(失败的消息是一串字符),因为时间原因,我还没有解决这个问题,大家有兴趣可以完善。到这里,我们的项目建立完毕。

  结束语:本文只是一个最基本的例子,旨在能够实现C#建立DNN模块,总体来说没什么技术含量,只是让大家能够明白一些建立过程中的细节。由于暂时我们不用DNN做项目,而本人又没有时间加以研究,所以目前也只能做到这一步了。但我希望有更多的这方面的文章在园子里出现。

 

 

  回头再来看我们之前添加的类"ArticleInfo.cs",添加其代码如下:

     using System;
/**//// <summary>
/// ArticleInfo 的摘要说明
/// </summary>
namespace Fantom.Modules.MyModule
{
  public class ArticleInfo
  {
    private int _id;
    private string _title;
    private string _content;
    private DateTime _createTime;
    private string _author;
    public ArticleInfo()
    {
      //
      // TODO: 在此处添加构造函数逻辑
      //
    }
    public ArticleInfo(int id, string title, string content, DateTime createTime, string author)
    {
      _id = id;
      _title = title;
      _content = content;
      _author = author;
      _createTime = createTime;
    }
    public int Id
    {
      get { return _id; }
      set { _id = value; }
    }
    public string Title
    {
      get { return _title; }
      set { _title = value; }
    }
    public string Content
    {
      get { return _content; }
      set { _content = value; }
    }
    public DateTime CreateTime
    {
      get { return _createTime; }
      set { _createTime = value; }
    }
    public string Author
    {
      get { return _author; }
      set { _author = value; }
    }
  }
}
在类"ArticleController.cs"中写下如下代码:



相关教程