文章教程

11.3企业宣传网站MVC4模式设计

8/31/2020 8:52:25 PM 人评论 次浏览

11.3 企业宣传网站MVC 4模式设计

学习目标

学习应用DBHelper类和Common类。

11.3.1 系统项目文件预览

在完成数据库创建后,接下来就是编写程序代码一一实现论坛系统的功能。为了使读者对整个网站系统有一个整体的印象,接下来首先给出网站系统项目的所有文件列表以及层次结构,如图11-15所示,其中“第1部分”是项目整体文件预览,“第2部分”给出了“App_Start”和“Content”的文件预览,“第3部分”给出了“Models”和“Scripts”的文件预览,“第4部分”给出了“Views”的文件预览。

图11-15 企业网站系统项目文件预览

11.3.2 项目文件架构

新创建的ASP.NET MVC 4 Web应用程序,其中模板选择“空”模板,视图引擎选择“ASPX”,创建成功后,默认给出的文件结构如图11-16所示。

图11-16 新创建的网站项目文件结构

1.添加Content文件夹

此时,首先需要给其添加一个文件夹“Content”,其中放置图片文件、样式文件等信息,这是规范流程,具体参见图11-15。

2.添加Scripts文件夹

这个文件夹的含义比较明确,其中就是放置一些js脚本文件,通常Web项目都会用到jQuery框架,所以复制“jquery-1.7.2.min.js”文件到该文件夹。

3.添加KindEditor

在线编辑器KindEditor几乎是Web程序必不可少的,所以也要引入在线编辑器KindEditor到项目中,首先是复制网络上下载的kindeditor-4.1.7文件夹到项目根目录下,然后需要添加引用“kindeditor-4.1.7/asp.net/bin/LitJSON.dll”文件到项目中。具体操作步骤如下。

(1)在项目中,如图11-17所示,右击“引用”项目,在弹出的快捷菜单中选择“添加引用”命令,弹出如图11-18所示对话框。

图11-17 选择“添加引用”命令

图11-18 “引用管理器”对话框

(2)在图11-18中,单击右下角的“浏览”按钮,显示如图11-19所示。

图11-19 选择引用文件窗口

(3)查找“kindeditor-4.1.7/asp.net/bin/LitJSON.dll”文件的位置,选择这个文件,然后单击右下角的“添加”按钮,显示如图11-20所示。

图11-20 引用管理器确认窗口

(4)在图11-20中,很明显可以看到“LitJSON.dll”文件已经选择上了,直接单击“确定”按钮即可。此时,就可以看到Web项目中的“引用”项目中已经有该文件了,如图11-21所示。



图11-21 添加引用后的文件项目

11.3.3 应用DBHelper类和Common类

在模型文件夹(Models)中,需要增加操作数据库通用类DBHelper。也就是第7章介绍的DBHelper类,把DBHelper.cs文件直接复制到模型文件夹中。需要修改的通常是其中的GetConn()方法,主要修改数据库服务器名称、登录账号、口令、数据库名称信息,GetConn()方法完整代码如下。

  /// <summary>
  ///生成连接字符串
  /// </summary>
  /// <returns></returns>
  public SqlConnection GetConn()
  {
    string connstr = @"server=hst01_pc;uid=sa;pwd=sa;database=
    company_db";
    SqlConnection conn = new SqlConnection(connstr);
    return conn;
  }
  #endregion

另外,需要在模型文件夹中增加一个业务操作公共类文件Common.cs,其中主要编写整个项目中通用的一些功能方法,如生成随机字符串、验证码、MD5加密方法、获取某个表信息等。接下来给出业务操作公共类文件Common.cs的完整代码,其中编写的方法基本上都写有注释,这里先不做过多的解释,在后面功能分析中会讲解其中的部分代码。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;
namespace Company_MvcApplication.Models
{
  public class Common
  {
    static DBHelper db = new DBHelper();
    #region判断后台管理用户是否已经登录
    public static bool IsLogin()
    {
       bool result = false;
       if (HttpContext.Current.Request.Cookies["adminuser"]
       ==null
       HttpContext.Current.Request.Cookies["adminuser"].
       Value=="")
       {
          result = false;
       }
       else
       {
          result = true;
       }
       return result;
    }
    #endregion
    #region MD5加密 验证码图片
    //获取一个随机字符串
    public static string GetRandom(int n)
    {
       string str="ABCDEFGHJKMNPQRSTUVWXYZabcdefghjkmnpqrs
       tuvwxyz23456789";
       Random random = new Random();
       string result = string.Empty;
       for (int i = 1; i <= n; i++)
       {
          result+=str[random.Next(0, str.Length-1)].ToString();
       }
       return result;
    }
    //输出图片
    public static void DisplayImage(string str)
    {
       HttpContext.Current.Session["code"] = str;
       //创建一个图片区域,设置宽度和高度
       Bitmap image = new Bitmap(50, 20);
       //获取这个图片区域,便于在其中添加元素
       Graphics g = Graphics.FromImage(image);
       //设置图片背景为白色
       g.Clear(Color.White);
       //画线构造一些盲点,意思就是故意让图片显示不清楚些
       Random random = new Random();
       for (int i = 0; i < 10; i++)
       {
          int x1 = random.Next(image.Width);
          int y1 = random.Next(image.Height);
          int x2 = random.Next(image.Width);
          int y2 = random.Next(image.Height);
          g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
       }
       //定义字体对象,设置字体和字体大小
       Font font = new Font("黑体", 12);
       //定义画笔颜色
       SolidBrush brush = new SolidBrush(Color.BlueViolet);
       //定义画笔写信息的位置坐标点,左上角为(0,0)点
       PointF point = new PointF(2, 2);
       //写字符串到图片中
       g.DrawString(str, font, brush, point);
       //给图片画边框
       g.DrawRectangle(new Pen(Color.Silver),0,0,image.
       Width-1, image.Height-1);
       //生成一个内存流对象,便于存储并输出图片
       MemoryStream ms = new MemoryStream();
       //保存绘制的图片到内存流ms中
       image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
       //输出二进制图片流
       HttpContext.Current.Response.BinaryWrite(ms.ToArray());
    }
    //MD5加密方法
    public static string Get_MD5(string strSource)
    {
       MD5 md5 = new MD5CryptoServiceProvider();
       //获取密文字节数组
       byte[] bytResult = md5.ComputeHash(Encoding.Default.
       GetBytes(strSource));
       //转换成字符串,32位
       string strResult = BitConverter.ToString(bytResult);
       //BitConverter转换出来的字符串会在每个字符中间产生一个分隔符,
       需要去除掉
       strResult = strResult.Replace("-", "");
       return strResult;
    }
    #endregion
    #region 显示网页对话框
    //显示一个网页对话框
    public static void ShowMessage(string str)
    {
       HttpContext.Current.Response.Write("<script>alert('" +
       str + "');history.back();
       </script>");
    }
    //显示一个网页对话框 方法重载
    public static void ShowMessage(string str,string url)
    {
       HttpContext.Current.Response.Write("<script>alert('"
       + str + "');location.href='"+url+"';
       </script>");
    }
    #endregion

    #region 专门为分页处理定义的方法
    //判断非数字
    public static bool IsNumber(string str)
    {
       bool result = true;
       string msg = "0123456789";
       for (int i = 0; i < str.Length; i++)
       {
          if (msg.IndexOf(str[i]) == -1)
          {
              result = false;
              break;
          }
       }
       return result;
    }
    //处理page的取值
    public static int GetPage(string pagestring, int pagecount)
    {
       int page;
       if (pagestring == null)
       {
          page = 1;
       }
       else if (!Common.IsNumber(pagestring))
       {
          page = 1;
       }
       else if (Convert.ToInt32(pagestring) < 1)
          {
          page = 1;
       }
       else if (Convert.ToInt32(pagestring) > pagecount)
       {
          page = pagecount;
       }
       else
       {
          page = Convert.ToInt32(pagestring);
       }
       return page;
    }
    //获取startpageno
    public static int GetStartPageno(int minpageno, int
    maxpageno,int pagecount, int page, out int endpageno)
    {
       int startpageno;
       if (minpageno > pagecount)
       {
          endpageno = pagecount;
       }
       else
       {
          endpageno = minpageno + (page - 1);
          if (endpageno > pagecount)
          {
              endpageno = pagecount;
          }
       }
       if (endpageno < maxpageno)
       {
          startpageno = 1;
       }
       else
       {
          startpageno = endpageno - maxpageno + 1;
       }
       return startpageno;
    }

    //完成分页效果显示功能
    public static void ShowPage(int recordcount, int pagesize,
   int page, int pagecount, int startpageno, int endpageno,
   string url)
   {
       HttpContext.Current.Response.Write("div style='height:
       80px;text-align:center;'class='page'>");
       HttpContext.Current.Response.Write("共" + recordcount.
       ToString() + "条 " + pagesize.ToString() + "条/页 第"
       + page.ToString()+ "页/共" + pagecount.ToString() + "页");
       HttpContext.Current.Response.Write("&nbsp;&nbsp;&n
       bsp;&nbsp;<br />");
       if (page == 1)
       {
          HttpContext.Current.Response.Write("<span class='
          disabled'>首页</span>&nbsp;&nbsp;");
          HttpContext.Current.Response.Write("<span class='
          disabled'>上页</span>&nbsp;&nbsp;");
       }
       else
       {
          HttpContext.Current.Response.Write("<a href='" +
          url + "page=1'>首页</a>&nbsp;&nbsp;");
          HttpContext.Current.Response.Write("<a href='"
          + url + "page=" + (page - 1).ToString() + "'>
          上页</a>&nbsp;&nbsp;");
       }
       for (int i = startpageno; i <= endpageno; i++)
       {
          if (page == i)
          {
              HttpContext.Current.Response.Write("<span class
              ='current'>" + i.ToString() + "</span>");
          }
          else
          {
              HttpContext.Current.Response.Write("<a href='"
              + url+"page="+i.ToString()+"'>"+i.ToString()+"</a>");
          }
       }
       if (page == pagecount)
       {
          HttpContext.Current.Response.Write("<span class=
          'disabled'>下页</span>&nbsp;&nbsp;");
          HttpContext.Current.Response.Write("<span class=
          'disabled'>尾页</span>&nbsp;&nbsp;");
       }
       else
       {
          HttpContext.Current.Response.Write("<a href='"
          + url + "page=" + (page + 1).ToString() +"'>下页
          </a>&nbsp;&nbsp;");
          HttpContext.Current.Response.Write("<a href='"
          + url + "page=" + pagecount.ToString() + "'>尾页
          </a>&nbsp;&nbsp;");
       }
       HttpContext.Current.Response.Write("</div>");
    }
    #endregion

    #region 获取tb_config中的信息
    public static string GetConfig(string fname)
    {
       string sql = "select top 1 " + fname + " from tb_config";
       return db.GetValue(sql);
    }
    #endregion

    #region 获取tb_fix中的信息
    public static System.Data.DataRow GetFixRow(int id)
    {
       Hashtable ht = new Hashtable();
       ht.Add("@id",id);
       string sql = "select id,title,content from tb_fix where id=@id";
       return db.GetRow(sql, ht);
    }
    #endregion

    #region 获取推荐产品信息
    public static System.Data.DataTable GetProdTable()
    {
       string sql = "select top 25 id,title,pic from tb_info
       where classid in(select classid from tb_class where
       parentid=2)order by mode desc,dt desc";
       return db.GetTable(sql);
    }
    #endregion

    #region 获取友情链接信息
    public static System.Data.DataTable GetFriendTable()
    {
       string sql = "select id,title,pic,url,sortid from
       tb_friend order by sortid asc,dt desc";
       return db.GetTable(sql);
    }
    #endregion
  }
}

教程类别