波斯马BOSSMA Information Technology

ASP.NET MVC实战体验之项目管理系统(2)

发布时间:2010年2月26日 / 分类:ASP.NET, ASP.NET MVC / 11,004 次浏览 / 评论

在上一节中,已经建好了数据表,并且新建了一个MVC项目;这一节将介绍如何创建Model、View、Controller。

第二步:创建Model、Controller、View

1、创建Model:

官方提供的例子使用的ADO.NET Entity Data Model来创建Model,还有人通过LINQ to SQL来创建。Model的功能是提供数据模型及对数据操作的支持,所以完全可以根据自己的规则来创建Model,只要达到目的就行了。

在Models文件夹下添加两个文件:ProjectModel.cs、StatusModel.cs.

先来看一下ProjectModel,这个文件包含两个类:PJProject和PJProjectDAL,PJProject提供数据实体模型,PJProjectDAL提供数据操作方法。

using System;
using System.Data;
using System.Text;
using System.Data.SqlClient;
using VeryCodes.DBUtility;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
namespace Project.Model
{
    ///
    /// 实体类PJProject。
    ///
    [Serializable]
    public class PJProject
    {
        public PJProject()
        { }
        #region Model
        [DisplayName("编号")]
        public int SID { set; get; }

        [Required]
        [DisplayName("项目名称")]
        public string Name { set; get; }

        [DisplayName("添加时间")]
        public DateTime? AddTime { set; get; }

        [DisplayName("实际开始时间")]
        public DateTime? StartTime { set; get; }

        [Required]
        [DisplayName("计划开始时间")]
        public DateTime? PlanStartTime { set; get; }

        [DisplayName("实际结束时间")]
        public DateTime? EndTime { set; get; }

        [Required]
        [DisplayName("计划结束时间")]
        public DateTime? PlanEndTime { set; get; }
        #endregion Model

    }

    ///
    /// 数据操作类PJProjectDAL。
    ///
    public class PJProjectDAL
    {
        #region  成员方法
        ///
        /// 是否存在该记录
        ///
        public bool Exists(int SID)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select count(1) from PJ_Project");
            strSql.Append(" where SID=@SID ");

            SqlParameter[] parameters = {
					new SqlParameter("@SID", SqlDbType.Int,4)};
            parameters[0].Value = SID;

            return DbHelperSQL.Exists(strSql.ToString(), parameters);
        }

        ///
        /// 增加一条数据
        ///
        public int Add(PJProject model)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("insert into PJ_Project(");
            strSql.Append("Name,AddTime,StartTime,PlanStartTime,EndTime,PlanEndTime)");
            strSql.Append(" values (");
            strSql.Append("@Name,@AddTime,@StartTime,@PlanStartTime,@EndTime,@PlanEndTime)");
            strSql.Append(";select @@IDENTITY");
            SqlParameter[] parameters = {
					new SqlParameter("@Name", SqlDbType.NVarChar,50),
					new SqlParameter("@AddTime", SqlDbType.DateTime),
					new SqlParameter("@StartTime", SqlDbType.DateTime),
					new SqlParameter("@PlanStartTime", SqlDbType.DateTime),
					new SqlParameter("@EndTime", SqlDbType.DateTime),
					new SqlParameter("@PlanEndTime", SqlDbType.DateTime)};
            parameters[0].Value = model.Name;
            parameters[1].Value = model.AddTime;
            parameters[2].Value = model.StartTime;
            parameters[3].Value = model.PlanStartTime;
            parameters[4].Value = model.EndTime;
            parameters[5].Value = model.PlanEndTime;

            object obj = DbHelperSQL.GetSingle(strSql.ToString(), parameters);
            if (obj == null)
            {
                return 1;
            }
            else
            {
                return Convert.ToInt32(obj);
            }
        }
        ///
        /// 更新一条数据
        ///
        public void Update(PJProject model)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("update PJ_Project set ");
            strSql.Append("Name=@Name,");
            strSql.Append("AddTime=@AddTime,");
            strSql.Append("StartTime=@StartTime,");
            strSql.Append("PlanStartTime=@PlanStartTime,");
            strSql.Append("EndTime=@EndTime,");
            strSql.Append("PlanEndTime=@PlanEndTime");
            strSql.Append(" where ID=@SID ");
            SqlParameter[] parameters = {
					new SqlParameter("@SID", SqlDbType.Int,4),
					new SqlParameter("@Name", SqlDbType.NVarChar,50),
					new SqlParameter("@AddTime", SqlDbType.DateTime),
					new SqlParameter("@StartTime", SqlDbType.DateTime),
					new SqlParameter("@PlanStartTime", SqlDbType.DateTime),
					new SqlParameter("@EndTime", SqlDbType.DateTime),
					new SqlParameter("@PlanEndTime", SqlDbType.DateTime)};
            parameters[0].Value = model.SID;
            parameters[1].Value = model.Name;
            parameters[2].Value = model.AddTime;
            parameters[3].Value = model.StartTime;
            parameters[4].Value = model.PlanStartTime;
            parameters[5].Value = model.EndTime;
            parameters[6].Value = model.PlanEndTime;

            DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
        }

        ///
        /// 删除一条数据
        ///
        public void Delete(int SID)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("delete from PJ_Project ");
            strSql.Append(" where ID=@SID ");
            SqlParameter[] parameters = {
					new SqlParameter("@SID", SqlDbType.Int,4)};
            parameters[0].Value = SID;

            DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
        }

        ///
        /// 得到一个对象实体
        ///
        public PJProject GetModel(int SID)
        {
            PJProject model = null;
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select  top 1 ID,Name,AddTime,StartTime,PlanStartTime,EndTime,PlanEndTime ");
            strSql.Append(" FROM PJ_Project ");
            strSql.Append(" where ID=@ID ");
            SqlParameter[] parameters = {
					new SqlParameter("@ID", SqlDbType.Int,4)};
            parameters[0].Value = SID;

            DataSet ds = DbHelperSQL.Query(strSql.ToString(), parameters);
            if (ds.Tables[0].Rows.Count > 0)
            {
                model = new PJProject();
                if (ds.Tables[0].Rows[0]["ID"].ToString() != "")
                {
                    model.SID = int.Parse(ds.Tables[0].Rows[0]["ID"].ToString());
                }
                model.Name = ds.Tables[0].Rows[0]["Name"].ToString();
                if (ds.Tables[0].Rows[0]["AddTime"].ToString() != "")
                {
                    model.AddTime = DateTime.Parse(ds.Tables[0].Rows[0]["AddTime"].ToString());
                }
                if (ds.Tables[0].Rows[0]["StartTime"].ToString() != "")
                {
                    model.StartTime = DateTime.Parse(ds.Tables[0].Rows[0]["StartTime"].ToString());
                }
                if (ds.Tables[0].Rows[0]["PlanStartTime"].ToString() != "")
                {
                    model.PlanStartTime = DateTime.Parse(ds.Tables[0].Rows[0]["PlanStartTime"].ToString());
                }
                if (ds.Tables[0].Rows[0]["EndTime"].ToString() != "")
                {
                    model.EndTime = DateTime.Parse(ds.Tables[0].Rows[0]["EndTime"].ToString());
                }
                if (ds.Tables[0].Rows[0]["PlanEndTime"].ToString() != "")
                {
                    model.PlanEndTime = DateTime.Parse(ds.Tables[0].Rows[0]["PlanEndTime"].ToString());
                }
            }
            return model;
        }

        ///
        /// 获得数据列表
        ///
        public DataSet GetList(string strWhere)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select * ");
            strSql.Append(" FROM PJ_Project ");
            if (strWhere.Trim() != "")
            {
                strSql.Append(" where " + strWhere);
            }
            return DbHelperSQL.Query(strSql.ToString());
        }

        ///
        /// 获得数据列表
        ///
        public List
 GetModelList(string strWhere)
        {
            DataSet ds = GetList(strWhere);
            List
 modelList = new List
();
            int rowsCount = ds.Tables[0].Rows.Count;
            if (rowsCount > 0)
            {
                for (int n = 0; n < rowsCount; n++)
                {
                    PJProject model = new PJProject();
                    if (ds.Tables[0].Rows[n]["ID"].ToString() != "")
                    {
                        model.SID = int.Parse(ds.Tables[0].Rows[n]["ID"].ToString());
                    }
                    model.Name = ds.Tables[0].Rows[n]["Name"].ToString();
                    if (ds.Tables[0].Rows[n]["AddTime"].ToString() != "")
                    {
                        model.AddTime = DateTime.Parse(ds.Tables[0].Rows[n]["AddTime"].ToString());
                    }
                    if (ds.Tables[0].Rows[n]["StartTime"].ToString() != "")
                    {
                        model.StartTime = DateTime.Parse(ds.Tables[0].Rows[n]["StartTime"].ToString());
                    }
                    if (ds.Tables[0].Rows[n]["PlanStartTime"].ToString() != "")
                    {
                        model.PlanStartTime = DateTime.Parse(ds.Tables[0].Rows[n]["PlanStartTime"].ToString());
                    }
                    if (ds.Tables[0].Rows[n]["EndTime"].ToString() != "")
                    {
                        model.EndTime = DateTime.Parse(ds.Tables[0].Rows[n]["EndTime"].ToString());
                    }
                    if (ds.Tables[0].Rows[n]["PlanEndTime"].ToString() != "")
                    {
                        model.PlanEndTime = DateTime.Parse(ds.Tables[0].Rows[n]["PlanEndTime"].ToString());
                    }
                    modelList.Add(model);
                }
            }
            return modelList;
        }

        #endregion  成员方法
    }
}

StatusModel也是如上的格式。
如果你的表有很多,那么自己手写这个文件将会很麻烦,通过代码生成工具来创建这个文件就省事多了,比如:CodeSmith、动软.net代码生成器。

2、创建Controller:
在Controllers文件上点右键,添加Controller,如图:

在弹出的窗口中,勾选单选框,自动添加相应的方法。

添加两个文件:ProjectController.cs、StatusController.cs

Controller控制数据的调用,然后发送到相应的视图。我们修改一下ProjectController中显示数据列表索引的方法。

private PJProject _model = new PJProject();
private PJProjectDAL _dal = new PJProjectDAL();

        //
        // GET: /Project/
        public ActionResult Index()
        {
            return View(_dal.GetModelList(""));
        }

?3、创建View

在controller文件中,找到要创建View的方法,在方法名上点右键。

如果没有Master Page,可以不用选择。

通过这种方式创建的View,已经根据Model中的实体类生成了一些Html,可以根据自己的需求继续修改。
这里修改一下Index.aspx:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<Project.Model.PJProject>>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">

??? <table style="margin:10px; width:100%">
??????? <tr>

??????????? <th>
??????????????? 编号
??????????? </th>
??????????? <th>
??????????????? 项目名称
??????????? </th>
??????????? <th>
??????????????? 开始时间
??????????? </th>
??????????? <th>
??????????????? 计划开始时间
??????????? </th>
??????????? <th>
??????????????? 结束时间
??????????? </th>
??????????? <th>
??????????????? 计划结束时间
??????????? </th>
??????????? <th>操作</th>
??????? </tr>

??? <% foreach (var item in Model) { %>

??????? <tr>
??????????? <td>
??????????????? <%= Html.Encode(item.SID) %>
??????????? </td>
??????????? <td>
??????????????? <%= Html.Encode(item.Name) %>
??????????? </td>
??????????? <td>
??????????????? <%= Html.Encode(String.Format("{0:yyyy-MM-dd}", item.StartTime))%>
??????????? </td>
??????????? <td>
??????????????? <%= Html.Encode(String.Format("{0:yyyy-MM-dd}", item.PlanStartTime)) %>
??????????? </td>
??????????? <td>
??????????????? <%= Html.Encode(String.Format("{0:yyyy-MM-dd}", item.EndTime))%>
??????????? </td>
??????????? <td>
??????????????? <%= Html.Encode(String.Format("{0:yyyy-MM-dd}", item.PlanEndTime))%>
??????????? </td>
???????????? <td>
??????????????? <%= Html.ActionLink("编辑", "Edit", new { id = item.SID })%> |
??????????????? <%= Html.ActionLink("详细", "Details", new { id = item.SID })%> |
??????????????? <%= Html.ActionLink("删除", "Delete", new { id = item.SID })%>
??????????? </td>
??????? </tr>

??? <% } %>

??? </table>

??? <p>
??????? <%= Html.ActionLink("添加新项目", "Create") %>
??? </p>

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="head" runat="server">
</asp:Content>

创建好了这三个部分,先通过数据库管理工具添加一些数据,就可以浏览一下看看了。

可以修改Controller中的其它方法,生成相应的View,执行其它的操作,如编辑、删除、查看详细等:

  //
        // GET: /Project/Details/5

        public ActionResult Details(int id)
        {
            _model = _dal.GetModel(id);
            return View(_model);
        }

        //
        // GET: /Project/Create

        public ActionResult Create()
        {
            return View();
        }

        //
        // POST: /Project/Create

        [HttpPost]
        public ActionResult Create([Bind] PJProject model)
        {
            if (ModelState.IsValid)
            {
                // TODO: Add insert logic here
                model.AddTime = DateTime.Now;
                _dal.Add(model);

                return RedirectToAction("Index");
            }
            return View(model);
        }

        //
        // GET: /Project/Edit/5

        public ActionResult Edit(int id)
        {
            _model = _dal.GetModel(id);
            return View(_model);
        }

        //
        // POST: /Project/Edit/5

        [HttpPost]
        public ActionResult Edit(PJProject model)
        {
            if (ModelState.IsValid)
            {
                // TODO: Add update logic here
                _dal.Update(model);

                return RedirectToAction("Index");
            }

            return View(model);
        }

        //
        // GET: /Project/Delete/5

        public ActionResult Delete(int id)
        {
            _dal.Delete(id);
            return RedirectToAction("Index");
        }

这一节的内容就到这里了,设计的内容比较多,这里很多内容都是简单带过,在后续的文章中会逐渐深入。
下一节将深入介绍Model。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯马,原文地址《ASP.NET MVC实战体验之项目管理系统(2)

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

发表评论