由于不善于排版和写blog 可能会有点乱 各位勿拍砖
因为项目前台是多变的所以本项目的主要方向在后台
前台是修改的别人模板(具体记不清在哪儿下的了 所以未放链接 如有看见请联系本人 )
主要采用技术 vs2008+sqlserver2005 辅助: ztree + codesimth +artdialog +kindeditor
数据库文件也附带其中 (如用数据库文件请在项目路径 Admin-->Items-->UserList后台代码中 BasePage改为继承System.Web.UI.Page 运行该页面为用户添加权限 其它类似)BasePage用作权限判断
为了减少项目体积 所以删除了部分图片
本项目特点
1、后台界面简单 大方 容易操作
2、代码采用codesmith生成 生成代码较为通用 可自己修改或制定适合自己的模板(如果需要带向博主所要模板)
3、网站前台考虑到SEO效果
4、后台权限针对到功能(需判断的权限在.aspx.cs继承一个类即可)
5、提供项目文件在线管理(可通过config文件配置 可修改的文件后缀名)
6、错误日志记录功能 可让你在线排查项目错误信息(错误日志记录在 根目录Log下)
codesimth 模板是自己搜集的还比较通用 没有的方法自己写上就可以了 先来看看我生成的一个dal类
using System; using System.Data.SqlClient; using System.Collections.Generic; using Models; namespace Service { /// <summary> /// 本类由软件生成生成 /// 禁止修改 /// 若需要扩展,请另建一个partial class完成。 /// </summary> public class LinksService { /// <summary> /// 获取所有记录 /// </summary> /// <returns></returns> public List<Links> GetAll() { string sql="select * from Links"; return SqlHelper.GetList<Links>(sql); } /// <summary> /// 根据主键ID查询单条记录 /// </summary> /// <param name="id">主键id</typeparam> /// <param name="reader"></param> /// <returns></returns> public Links GetById(int id) { string sql="select * from Links where ID=@id"; SqlParameter spm=new SqlParameter("@id",id); return SqlHelper.GetSingle<Links>(sql,spm); } /// <summary> /// 按照分页条件查询记录集 /// </summary> /// <param name="startIndex">起始行号,从0开始</typeparam> /// <param name="count">需要查询的记录条数</param> /// <param name="sortColumn">排序列名,若要降序请用列名+" DESC",传入空默认按照主键降序排列</param> /// <param name="links">查询条件,若无此条件请保持该属性默认值</typeparam> /// <returns></returns> public List<Links> GetByPage(int startIndex,int count,string sortColumn,Links links) { if(string.IsNullOrEmpty(sortColumn)) sortColumn="ID DESC"; string sql="exec proc_GetByPage @startIndex,@count,@order,@tableName,@pkName,@where"; SqlParameter[] spms=new SqlParameter[] { new SqlParameter("@startIndex",startIndex), new SqlParameter("@count",count), new SqlParameter("@order",sortColumn), new SqlParameter("@tableName","Links"), new SqlParameter("@pkName","ID"), new SqlParameter("@where",GetConditions(links)) }; return SqlHelper.GetList<Links>(sql,spms); } /// <summary> /// 获取记录条数 /// </summary> /// <param name="links">查询条件,若无此条件请保持该属性默认值</typeparam> /// <returns></returns> public int GetCount(Links links) { string sql="select count(*) from Links where 1=1"+GetConditions(links); return SqlHelper.GetCount(sql); } /// <summary> /// 生成查询条件的sql语句 /// </summary> /// <param name="links">查询条件,若无此条件请保持该属性默认值</typeparam> /// <returns>sql语句中where后面的部门,以" and"开始,sql语句中最后部分应是" where 1=1"</returns> private string GetConditions(Links links) { string condition=""; if(links!=null) { if(links.ID!=(default(int))) { condition+=" and ID = '"+links.ID+"'"; } if(!string.IsNullOrEmpty(links.LName)) { condition+=" and LName like '%"+SqlHelper.GetParameterValue(links.LName)+"%'"; } if(!string.IsNullOrEmpty(links.LPath)) { condition+=" and LPath like '%"+SqlHelper.GetParameterValue(links.LPath)+"%'"; } } return condition; } /// <summary> /// 更新数据 /// </summary> /// <param name="links">需要更新的数据实体</param> /// <returns></returns> //public int Update(Links links) // { // string sql="update Links set LName=@lName,LPath=@lPath where ID=@id"; // SqlParameter[] spms=new SqlParameter[] // { // new SqlParameter("@id",links.ID),new SqlParameter("@lName",links.LName??(object)DBNull.Value),new SqlParameter("@lPath",links.LPath??(object)DBNull.Value) // }; // return SqlHelper.ExecuteNonQuery(sql,spms); //} /// <summary> /// 更新数据,只传入需要更新的字段,可批量更新 /// </summary> /// <param name="ids">需要更新的数据主键</param> /// <returns></returns> public int Update(Links links) { List<SqlParameter> spms=new List<SqlParameter>(); string sql="update Links set "; if(links!=null) { if(!string.IsNullOrEmpty(links.LName)) { sql+="LName=@lName,"; spms.Add(new SqlParameter("@lName",links.LName)); } if(!string.IsNullOrEmpty(links.LPath)) { sql+="LPath=@lPath,"; spms.Add(new SqlParameter("@lPath",links.LPath)); } } sql=sql.Substring(0,sql.Length-1); sql+=" where ID =@id"; spms.Add(new SqlParameter("@id",links.ID)); return SqlHelper.ExecuteNonQuery(sql,spms.ToArray()); } /// <summary> /// 删除数据 /// </summary> /// <param name="id">需要删除的数据主键id列表,可传单个ID,也可传数组</param> /// <returns></returns> public int Delete(params int[] ids) { if(ids.Length==0)return 0; List<SqlParameter> spms=new List<SqlParameter>(); string sql="delete from Links where ID in ("; for(int i=0;i<ids.Length;i++) { sql+="@id"+i+","; spms.Add(new SqlParameter("@id"+i,ids[i])); } sql=sql.Substring(0,sql.Length-1); sql+=")"; return SqlHelper.ExecuteNonQuery(sql,spms.ToArray()); } /// <summary> /// 插入数据,自增列的值对应更新在实体类参数对象中 /// </summary> /// <param name="links">需要插入的数据实体</param> /// <returns>影响行数</returns> public int Insert(Links links) { string sql="insert into Links(LName,LPath) values ("+(links.LName==null?"null":"@lName")+","+(links.LPath==null?"null":"@lPath")+");Select @@IDENTITY"; SqlParameter[] spms=new SqlParameter[] { new SqlParameter("@lName",links.LName??(object)DBNull.Value),new SqlParameter("@lPath",links.LPath??(object)DBNull.Value) }; return int.Parse(SqlHelper.ExecuteScalar(sql,spms).ToString()); } } }
该类少许代码经过自己修改
来几张项目后台页面
这是新闻管理
这是修改项目文件
这是普通的列表页面
个人认为 ,不存在说的通用的网站,通用的网站都是通过一定策略 和遵守一定约定实现的
这个项目也一样通过此实现
代码简单 完全可以进行二次开发(可免费使用 但请注明出处)
后台模板经测试 大多浏览器都兼容 由于不善于表达有些功能未表现出来 项目适合新手
希望各位 提出宝贵意见或建议 以便于帮助该项目长期更新
如果疑问可联系(只在业余时间提供解决)
QQ:1459598574 Email:[email protected]
下载地址:http://files.cnblogs.com/yujiajun/yujiajun.zip