本次参考学习了
https://www.cnblogs.com/ymnets/p/3424309.htmlC
这个人的教程
但是由于时代久远,教程节奏快,版本的问题。对于初学者来说,很不友好。
正好我也要学习,所以自己重新写一下,顺带改一改其中的小bug。
系统目标:实现一个权限管理案例 用户—角色—权限
本节目标
:将数据库中的数据的展示在前台
1.直接呱唧呱唧上代码吧
上一节,我们一起添加了EF模型
下面的截图中红色圈出来的部分是需要创建的。
注意哪些是类,哪些是接口
创建完控制器后,记得顺带把视图创建了
当然,这部分代码中,有一部分并没有起到作用,后面会用到
还有一部分代码,是下一节才会创建的,但是本节会用的,所以就先创建了
莫怪某怪
-
SysSampleBLL
-
ISysSampleBLL
-
SysSampleRepository
-
ISysSampleRepository
-
GridPager
-
ValidationErrorHelper
-
SysSampleController
-
SysSampleModel
<1>SysSampleBLL
using Apps.App.DAL;
using Apps.App.IBLL;
using Apps.App.IDAL;
using Apps.App.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Apps.App.BLL
{
public class SysSampleBLL
{
DBContainer db = new DBContainer();
ISysSampleRepository Rep = new SysSampleRepository();
/// <summary>
/// 获取列表
/// </summary>
/// <param name="pager">JQgrid分页</param>
/// <param name="queryStr">搜索条件</param>
/// <returns>列表</returns>
public List<SysSample> GetList(string queryStr)
{
IQueryable<SysSample> queryData = Rep.GetList(db);
return queryData.ToList();
}
/// <summary>
/// 创建一个实体
/// </summary>
/// <param name="errors">持久的错误信息</param>
/// <param name="model">模型</param>
/// <returns>是否成功</returns>
public bool Create(SysSample entity)
{
try
{
if (Rep.Create(entity) == 1)
{
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
//ExceptionHander.WriteException(ex);
return false;
}
}
/// <summary>
/// 删除一个实体
/// </summary>
/// <param name="errors">持久的错误信息</param>
/// <param name="id">id</param>
/// <returns>是否成功</returns>
public bool Delete(string id)
{
try
{
if (Rep.Delete(id) == 1)
{
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
//ExceptionHander.WriteException(ex);
return false;
}
}
/// <summary>
/// 修改一个实体
/// </summary>
/// <param name="errors">持久的错误信息</param>
/// <param name="model">模型</param>
/// <returns>是否成功</returns>
public bool Edit(SysSample entity)
{
try
{
if (Rep.Edit(entity) == 1)
{
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
//ExceptionHander.WriteException(ex);
return false;
}
}
/// <summary>
/// 判断是否存在实体
/// </summary>
/// <param name="id">主键ID</param>
/// <returns>是否存在</returns>
public bool IsExists(string id)
{
if (db.SysSample.SingleOrDefault(a => a.Id == id) != null)
{
return true;
}
return false;
}
/// <summary>
/// 根据ID获得一个实体
/// </summary>
/// <param name="id">id</param>
/// <returns>实体</returns>
public SysSample GetById(string id)
{
if (IsExist(id))
{
SysSample entity = Rep.GetById(id);
return entity;
}
else
{
return null;
}
}
/// <summary>
/// 判断一个实体是否存在
/// </summary>
/// <param name="id">id</param>
/// <returns>是否存在 true or false</returns>
public bool IsExist(string id)
{
return Rep.IsExist(id);
}
}
}
<2>ISysSampleBLL
using Apps.App.Common;
using Apps.Models.Sys;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Apps.App.IBLL
{
interface ISysSampleBLL
{
/// <summary>
/// 获取列表
/// </summary>
/// <param name="pager">JQgrid分页</param>
/// <param name="queryStr">搜索条件</param>
/// <returns>列表</returns>
List<SysSampleModel> GetList(ref GridPager pager, string queryStr);
/// <summary>
/// 创建一个实体
/// </summary>
/// <param name="errors">持久的错误信息</param>
/// <param name="model">模型</param>
/// <returns>是否成功</returns>
bool Create(ref ValidationErrors errors, SysSampleModel model);
/// <summary>
/// 删除一个实体
/// </summary>
/// <param name="errors">持久的错误信息</param>
/// <param name="id">id</param>
/// <returns>是否成功</returns>
bool Delete(ref ValidationErrors errors, string id);
/// <summary>
/// 删除多个实体,中断将回滚
/// </summary>
/// <param name="errors">持久的错误信息</param>
/// <param name="deleteCollection">主键数组集合</param>
/// <returns>是否成功</returns>
bool Delete(ref ValidationErrors errors, string[] deleteCollection);
/// <summary>
/// 修改一个实体
/// </summary>
/// <param name="errors">持久的错误信息</param>
/// <param name="model">模型</param>
/// <returns>是否成功</returns>
bool Edit(ref ValidationErrors errors, SysSampleModel model);
/// <summary>
/// 根据ID获得一个Model实体
/// </summary>
/// <param name="id">id</param>
/// <returns>Model实体</returns>
SysSampleModel GetById(string id);
/// <summary>
/// 判断是否存在实体
/// </summary>
/// <param name="id">主键ID</param>
/// <returns>是否存在</returns>
bool IsExist(string id);
}
}
<3>SysSampleRepository
using Apps.App.IDAL;
using Apps.App.Models;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace Apps.App.DAL
{
public class SysSampleRepository : ISysSampleRepository, IDisposable
{
/// <summary>
/// 获取列表
///</summary>
/// <param name="db">数据库上下文</param>
/// <returns>数据列表</returns>
public IQueryable<SysSample> GetList(DBContainer db)
{
IQueryable<SysSample>
list = db.SysSample.AsQueryable();
return list;
}
/// <summary>
/// 创建一个实体
///</summary>
/// <param name="db">数据库上下文</param>
/// <param name="entity">实体</param>
public int Create(SysSample entity)
{
using (DBContainer db = new DBContainer())
{
db.Set<SysSample>().Add(entity);
return db.SaveChanges();
}
}
/// <summary>
/// 删除一个实体
///</summary>
/// <param name="db">数据库上下文</param>
/// <param name="entity">主键ID</param>
public int Delete(string id)
{
using (DBContainer db = new DBContainer())
{
SysSample entity = db.SysSample.SingleOrDefault(a => a.Id == id);
db.Set<SysSample>().Remove(entity);
return db.SaveChanges();
}
}
/// <summary>
/// 修改一个实体
///</summary>
/// <param name="db">数据库上下文</param>
/// <param name="entity">实体</param>
public int Edit(SysSample entity)
{
using (DBContainer db = new DBContainer())
{
db.Set<SysSample>().Attach(entity);
db.Entry<SysSample>(entity).State = EntityState.Modified;
return db.SaveChanges();
}
}
/// <summary>
/// 获得一个实体
///</summary>
/// <param name="id">id</param>
/// <returns>实体</returns>
public SysSample GetById(string id)
{
using (DBContainer db = new DBContainer())
{
return db.SysSample.SingleOrDefault(a => a.Id == id);
}
}
/// <summary>
/// 判断一个实体是否存在
///</summary>
/// <param name="id">id</param>
/// <returns>是否存在 true or false</returns>
public bool IsExist(string id)
{
using (DBContainer db = new DBContainer())
{
SysSample entity = GetById(id);
if (entity != null)
return true;
return false;
}
}
public void Dispose()
{
}
}
}
<4>ISysSampleRepository
using Apps.App.Models;
using System.Linq;
namespace Apps.App.IDAL
{
interface ISysSampleRepository
{
/// <summary>
/// 获取列表
/// </summary>
/// <param name="db">数据库上下文</param>
/// <returns>数据列表</returns>
IQueryable<SysSample> GetList(DBContainer db);
/// <summary>
/// 创建一个实体
/// </summary>
/// <param name="entity">实体</param>
int Create(SysSample entity);
/// <summary>
/// 删除一个实体
/// </summary>
/// <param name="entity">主键ID</param>
int Delete(string id);
/// <summary>
/// 修改一个实体
/// </summary>
/// <param name="entity">实体</param>
int Edit(SysSample entity);
/// <summary>
/// 获得一个实体
/// </summary>
/// <param name="id">id</param>
/// <returns>实体</returns>
SysSample GetById(string id);
/// <summary>
/// 判断一个实体是否存在
/// </summary>
bool IsExist(string id);
}
}
<5>GridPager
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Apps.App.Common
{
public class GridPager
{
public int rows { get; set; }//每页行数
public int page { get; set; }//当前页是第几页
public string order { get; set; }//排序方式
public string sort { get; set; }//排序列
public int totalRows { get; set; }//总行数
public int totalPages //总页数
{
get
{
return (int)Math.Ceiling((float)totalRows / (float)rows);
}
}
}
}
<6>ValidationErrorHelper
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Apps.App.Common
{
public class ValidationErrorHelper
{
}
public class ValidationError
{
public ValidationError() { }
public string ErrorMessage { get; set; }
}
public class ValidationErrors : List<ValidationError>
{
/// <summary>
/// 添加错误
/// </summary>
/// <param name="errorMessage">信息描述</param>
public void Add(string errorMessage)
{
base.Add(new ValidationError { ErrorMessage = errorMessage });
}
/// <summary>
/// 获取错误集合
/// </summary>
public string Error
{
get
{
string error = "";
this.All(a => {
error += a.ErrorMessage;
return true;
});
return error;
}
}
}
}
<7>SysSampleController
using Apps.App.BLL;
using Apps.App.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Apps.Controllers
{
public class SysSampleController : Controller
{
// GET: SysSample
public ActionResult Index()
{
SysSampleBLL bll = new SysSampleBLL();
List<SysSample> list = bll.GetList("");
return View(list);
}
}
}
<8>SysSampleModel
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace Apps.Models.Sys
{
public class SysSampleModel
{
[Display(Name = "ID")]
public string Id { get; set; }
[Display(Name = "名称")]
public string Name { get; set; }
[Display(Name = "年龄")]
[Range(0, 10000)]
public int? Age { get; set; }
[Display(Name = "生日")]
public DateTime? Bir { get; set; }
[Display(Name = "照片")]
public string Photo { get; set; }
[Display(Name = "简介")]
public string Note { get; set; }
[Display(Name = "创建时间")]
public DateTime? CreateTime { get; set; }
}
}
好了到现在我们把后台代码基本完成了,下面添加前台代码
@using Apps;
@model IEnumerable<Apps.App.Models.SysSample>
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Age)
</th>
<th>
@Html.DisplayNameFor(model => model.Bir)
</th>
<th>
@Html.DisplayNameFor(model => model.Photo)
</th>
<th>
@Html.DisplayNameFor(model => model.Note)
</th>
<th>
@Html.DisplayNameFor(model => model.CreateTime)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Age)
</td>
<td>
@Html.DisplayFor(modelItem => item.Bir)
</td>
<td>
@Html.DisplayFor(modelItem => item.Photo)
</td>
<td>
@Html.DisplayFor(modelItem => item.Note)
</td>
<td>
@Html.DisplayFor(modelItem => item.CreateTime)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
@Html.ActionLink("Details", "Details", new { id = item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id = item.Id })
</td>
</tr>
}
</table>
</body>
</html>
让我们一起运行一下代码看看
有的伙伴就郁闷了,为啥自己没有数据显示。。。
自己去数据库填写几条几可以了
下面我们再去修改一下第一篇文章那个界面,把这次界面啊嵌入到那个里面
来,运行这个页面
OK!!!!!
2.总结
说实话
只读原文章
有几处坑
emmmm
好了我们这一节的小任务就算完成了,不足的地方欢迎批评指正