11.3 企业宣传网站MVC 4模式设计
学习目标
学习应用DBHelper类和Common类。
11.3.1 系统项目文件预览
在完成数据库创建后,接下来就是编写程序代码一一实现论坛系统的功能。为了使读者对整个网站系统有一个整体的印象,接下来首先给出网站系统项目的所有文件列表以及层次结构,如图11-15所示,其中“第1部分”是项目整体文件预览,“第2部分”给出了“App_Start”和“Content”的文件预览,“第3部分”给出了“Models”和“Scripts”的文件预览,“第4部分”给出了“Views”的文件预览。
11.3.2 项目文件架构
新创建的ASP.NET MVC 4 Web应用程序,其中模板选择“空”模板,视图引擎选择“ASPX”,创建成功后,默认给出的文件结构如图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所示对话框。
(2)在图11-18中,单击右下角的“浏览”按钮,显示如图11-19所示。
(3)查找“kindeditor-4.1.7/asp.net/bin/LitJSON.dll”文件的位置,选择这个文件,然后单击右下角的“添加”按钮,显示如图11-20所示。
(4)在图11-20中,很明显可以看到“LitJSON.dll”文件已经选择上了,直接单击“确定”按钮即可。此时,就可以看到Web项目中的“引用”项目中已经有该文件了,如图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(" &n bsp; <br />"); if (page == 1) { HttpContext.Current.Response.Write("<span class=' disabled'>首页</span> "); HttpContext.Current.Response.Write("<span class=' disabled'>上页</span> "); } else { HttpContext.Current.Response.Write("<a href='" + url + "page=1'>首页</a> "); HttpContext.Current.Response.Write("<a href='" + url + "page=" + (page - 1).ToString() + "'> 上页</a> "); } 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> "); HttpContext.Current.Response.Write("<span class= 'disabled'>尾页</span> "); } else { HttpContext.Current.Response.Write("<a href='" + url + "page=" + (page + 1).ToString() +"'>下页 </a> "); HttpContext.Current.Response.Write("<a href='" + url + "page=" + pagecount.ToString() + "'>尾页 </a> "); } 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 } }