开发环境:VS2015RC
实例内容: 会员报名以及报名信息的查询和审核管理
教程编写目的: 新入职的程序员快速掌握MVC开发过程
提纲:
一. 建立数据模型(AC_ContestantAuditionsUserInfo.cs)和逻辑代码(AC_ContestantAuditionsUserInfoDAO.cs)。
二. 建立业务层逻辑代码(例如增、删、改、查)。
三.建立业务接口层代码(对于业务层逻辑代码的接口映射)
四. 建立视图。
五. 建立控制器。
六. 运行效果展示。
下面开始正文:
一。 数据库建模。
项目结构如下图:
图1
1. 建模(AC_ContestantAuditionsUserInfo.cs)
代码:
public class AC_ContestantAuditionsUserInfo:BaseEntity
{
///// <summary>
///// 此表的主键Id,但因为继承了公共类里的Id,所以这里可以不需要,但如没有继承BaseEntity,则需写出此字段。
///// </summary>
//public int Id { get; set; }
/// <summary>
/// 选手会员ID
/// </summary>
public int UserId { get; set; }
/// <summary>
/// 选手联系电话
/// </summary>
public string UserPhone { get; set; }
/// <summary>
/// 选手真实姓名
/// </summary>
public string TrueName { get; set; }
/// <summary>
/// 选手性别
/// </summary>
public bool UserSex { get; set; }
/// <summary>
/// 选手年龄
/// </summary>
public int UserAge { get; set; }
/// <summary>
/// 选手被点击次数
/// </summary>
public int Click { get; set; }
/// <summary>
/// 选手照片路径(此为选手报名时所提交的选手真人照片,而不是后面可以多次添加的生活照片)
/// </summary>
public string UserImg { get; set; }
/// <summary>
/// 选手视频路径(此为选手报名时提交的关于自已本人的介绍视频路径)
/// </summary>
public string UserVideoUrl { get; set; }
/// <summary>
/// 是否推荐
/// </summary>
public bool IsRecommend { get; set; }
/// <summary>
/// 选手所报名的活动批次
/// </summary>
public int BatchId { get; set; }
/// <summary>
/// 推荐选手的会员ID
/// </summary>
public int RecommendUserId { get; set; }
/// <summary>
/// 选手报名日期
/// </summary>
public DateTime Createdatetime { get; set; }
}
2. 建立对 AC_ContestantAuditionsUserInfo表的增删改查逻辑。
文件位置如图:
代码:
/// <summary>
/// 此处继承了BASEDAO的基础方法,对于数据库的增删改查的基础方法,这里用来写一些满足自已需要创建的个人方法
/// </summary>
public class AC_ContestantAuditionsUserInfoDAO:BaseDAO
{
/// <summary>
/// 此处为一示例,表示我要通过用户会员ID来查询这个会员所报名的活动选手列表信息
/// </summary>
/// <param name="userId">会员ID</param>
/// <returns></returns>
public List<AC_ContestantAuditionsUserInfo> GetAcContestantAuditionsUserInfosByUserId(int userId)
{
//执行语句
string sql = @"SELECT * FROM AC_ContestantAuditionsUserInfo WHERE UserId = @uid)";
return Run(conn => conn.Query<AC_ContestantAuditionsUserInfo>(sql, new { uid = userId }).ToList());
}
/// <summary>
/// 获取相应条件的分页选手信息列表
/// </summary>
/// <param name="totalCount">选手总数</param>
/// <param name="pageNumber">当前页数</param>
/// <param name="pageSize">当页显示多少条数</param>
/// <param name="userId">用户会员Id</param>
/// <param name="batchId">活动批次Id</param>
/// <returns></returns>
public List<AC_ContestantAuditionsUserInfo> GetPage(out int totalCount, int pageNumber = 1, int pageSize = 15, int userId = 0, int batchId = 0)
{
StringBuilder sb = new StringBuilder();
if (userId != 0)
sb.AppendFormat(" AND [UserId] = @userId");
if (batchId != 0)
sb.AppendFormat(" AND [BatchId] = @batchId");
return GetPage<AC_ContestantAuditionsUserInfo>(out totalCount, pageNumber, pageSize, sb.ToString(), new
{
userId = userId,
batchId = batchId
});
}
}
3.建立对数据操作层AC_ContestantAuditionsUserInfoDAO的接口方法编写。
文件位置如图:
1 public class ActivityManageService
2 {
3 #region Private Fields
4 /// <summary>
5 /// 这里引用DAO文件
6 /// </summary>
7 private readonly AC_ContestantAuditionsUserInfoDAO _acContestantAuditionsUserDao = new AC_ContestantAuditionsUserInfoDAO();
8
9 #endregion
10
11 #region AC_ContestantAuditionsUserInfoDAO
12 /// <summary>
13 /// 根据ID获取实体
14 /// </summary>
15 /// <param name="id">实体ID主键</param>
16 /// <returns></returns>
17 public AC_ContestantAuditionsUserInfo GetAcContestantAuditionsUserInfoById(int id)
18 {
19 return _acContestantAuditionsUserDao.GetById<AC_ContestantAuditionsUserInfo>(id);
20 }
21
22 /// <summary>
23 /// 插入新实体AC_ContestantAuditionsUserInfo接口的实现
24 /// </summary>
25 /// <param name="acContestantAuditionsUser">AC_ContestantAuditionsUserInfo实体</param>
26 /// <returns></returns>
27 public int InsertAC_ContestantAuditionsUser(AC_ContestantAuditionsUserInfo acContestantAuditionsUser)
28 {
29 if (acContestantAuditionsUser == null)
30 throw new ArgumentNullException("InsertAC_ContestantAuditionsUser");
31
32 return _acContestantAuditionsUserDao.Insert<AC_ContestantAuditionsUserInfo>(acContestantAuditionsUser);
33
34 }
35 /// <summary>
36 /// 删除实体AC_ContestantAuditionsUserInfo接口的实现
37 /// </summary>
38 /// <param name="acContestantAuditionsUser">AC_ContestantAuditionsUserInfo实体</param>
39 /// <returns></returns>
40 public int DelAC_ContestantAuditionsUser(AC_ContestantAuditionsUserInfo acContestantAuditionsUser)
41 {
42 if (acContestantAuditionsUser == null)
43 throw new ArgumentNullException("DelAC_ContestantAuditionsUser");
44
45 return _acContestantAuditionsUserDao.Delete<AC_ContestantAuditionsUserInfo>(acContestantAuditionsUser);
46
47
48 }
49 /// <summary>
50 /// 更新实体AC_ContestantAuditionsUserInfo接口的实现
51 /// </summary>
52 /// <param name="acContestantAuditionsUser">更新的AC_ContestantAuditionsUserInfo实体</param>
53 /// <returns></returns>
54 public int UpdateAC_ContestantAuditionsUser(AC_ContestantAuditionsUserInfo acContestantAuditionsUser)
55 {
56 if (acContestantAuditionsUser == null)
57 throw new ArgumentNullException("UpdateAC_ContestantAuditionsUser");
58
59 return _acContestantAuditionsUserDao.Update<AC_ContestantAuditionsUserInfo>(acContestantAuditionsUser);
60 }
61 //以上为公共方法接口的实现,以下为个人方法接口的实现
62
63 /// <summary>
64 /// 返回不带分页的该用户会员的报名选手列表信息
65 /// </summary>
66 /// <param name="userId">用户会员Id</param>
67 /// <returns>List<AC_ContestantAuditionsUserInfo></returns>
68 public List<AC_ContestantAuditionsUserInfo> GetAC_ContestantAuditionsUserListByUserId(int userId)
69 {
70 return _acContestantAuditionsUserDao.GetAC_ContestantAuditionsUserInfoListByUserId(userId);
71 }
72
73 /// <summary>
74 /// 返回带分页信息的AC_ContestantAuditionsUserInfo列表信息
75 /// </summary>
76 /// <param name="pageNumber">当前页数</param>
77 /// <param name="pageSize">当前页数最多显示条数</param>
78 /// <param name="userId">用户会员Id</param>
79 /// <param name="batchId">活动批次Id</param>
80 /// <returns></returns>
81 public PageModel<AC_ContestantAuditionsUserInfo> GetAC_ContestantAuditionsUserInfoPage(int pageNumber = 1,
82 int pageSize = 15, int userId = 0, int batchId = 0)
83 {
84 int totalCount;
85 var list = _acContestantAuditionsUserDao.GetPage(out totalCount, pageNumber, pageSize, userId, batchId);
86 return new PageModel<AC_ContestantAuditionsUserInfo>(pageSize, pageNumber, totalCount, list);
87 }
88
89
90 #endregion
91 }
二. 建立视图
建立视图文件
ActivityAdd.cshtml代码如下
@using NiceBiz.Core.Domain
@model AC_ContestantAuditionsUserInfo
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title></title>
</head>
<body>
@using (Html.BeginForm("ActivityAdd", "ActivityManage"))
{
<div>
<table>
<tr><td colspan="2">活动选手报名提交表单</td></tr>
<tr><td>选手姓名:</td><td>@Html.TextBoxFor(x=>x.TrueName)</td></tr>
<tr><td>选手联系电话:</td><td>@Html.TextBoxFor(x=>x.UserPhone)</td></tr>
<tr><td>选手姓别:</td><td>@Html.RadioButtonFor(x=>x.UserSex,"男") @Html.RadioButtonFor(x=>x.UserSex,"女")</td></tr>
<tr><td>选手年龄:</td><td>@Html.TextBoxFor(x=>x.UserAge)</td></tr>
<tr><td colspan="2"><input id="Submit1" type="submit" value="提交" /></td></tr>
</table>
</div>
}
</body>
</html>
ActivityList.cshtml代码如下
@using NiceBiz.Web.Framework
@model NiceBiz.Core.PageModel<NiceBiz.Core.Domain.AC_ContestantAuditionsUserInfo>
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title></title>
</head>
<body>
@foreach (var acContestantAuditionsUserInfo in Model)
{
<div>
选手姓名:@acContestantAuditionsUserInfo.TrueName<br/>
选手年龄:@acContestantAuditionsUserInfo.UserAge
</div>
}
@Html.WebPager(Model)
</body>
</html>
三. 编写控制器代码
在如下位置创建控制器文件ActivityManageController.cs
代码如下
1 public class ActivityManageController : WebController
2 {
3 private readonly ActivityManageService _activityManageService = new ActivityManageService();
4 public ActionResult ActivityAdd()
5 {
6 return View();
7 }
8
9 [HttpPost]
10 public ActionResult ActivityAdd(AC_ContestantAuditionsUserInfo acContestantAuditionsUser)
11 {
12 acContestantAuditionsUser.BatchId = 1;
13 acContestantAuditionsUser.Click = 0;
14 acContestantAuditionsUser.Createdatetime=DateTime.Now;
15 acContestantAuditionsUser.IsRecommend = false;
16 acContestantAuditionsUser.UserId = 0;
17 acContestantAuditionsUser.RecommendUserId = 0;
18 acContestantAuditionsUser.UserVideoUrl = "";
19 acContestantAuditionsUser.UserImg = "";
20 int ok = _activityManageService.InsertAC_ContestantAuditionsUser(acContestantAuditionsUser);
21 if (ok > 0)
22 {
23 return (ActionResult) RedirectToAction("ActivityList", "ActivityManage");
24 }
25 return View(acContestantAuditionsUser);
26 }
27
28 public ActionResult ActivityList(int page = 1, int size = 10, int userId = 0, int batchId = 0)
29 {
30 var list = _activityManageService.GetAC_ContestantAuditionsUserInfoPage(page, size, userId, batchId);
31 return View(list);
32 }
33 }
四. 运行效果
运行效果如下图显示
点击提交后显示下图所示
此MVC示例已完成。
------------------------------