04-人员增删改查
案例:个人信息管理。
l 使用NVelocity的开发方式重写登录程序,把NVelocity封装成
RenderTemplate方法。
l 这种HttpHandler+ NVelocity的方式非常类似于PHP+smarty的开
发方式,也有利于理解asp.net mvc。HttpHandler就是Controller
,模板就是View, Controller不操作View的内部细节,只是把数
据给View,由View自己控制怎样显示。
l 字段:Id、姓名、年龄、个人网址(可以为空)。
l 列表页面和编辑界面:PersonList.aspx、
PersonEdit.aspx?Action=AddNew、
PersonEdit.aspx?Action=Edit&Id=2(在PersonEdit页面判断是
否传过来了save按钮来判断是加载还是保存。渲染页面的时候把
Action和Id保存在隐藏字段中。保存成功后Redirect回List页面)
l 进一步案例:有关联字段,比如班级,实现备注
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; namespace CRUDTest1 { /// <summary> /// PersonList 的摘要说明 /// </summary> public class PersonList : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; DataTable dt = SqlHelper.ExecuteDataTable("select * from T_Persons"); //DataTable不是集合,所以无法foreach遍历,DataTable的Rows属性 //代表表格中的数据行的集合(DataRow的集合),一般传递DataRowCollection //给模板方便遍历 string html = CommonHelper.RenderHtml("PersonList.htm", dt.Rows); context.Response.Write(html); //MVC: } public bool IsReusable { get { return false; } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.SqlClient; using System.Data; namespace CRUDTest1 { /// <summary> /// PersonEdit 的摘要说明 /// </summary> public class PersonEdit : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; //PersonEdit.ashx?action=AddNew //PersonEdit.ashx?action=Edit&Id=3 string action = context.Request["Action"]; if (action == "AddNew") { //判断是否含有Save并且等于true,如果是的话就说明是点击【保存】按钮请求来的 bool save = Convert.ToBoolean(context.Request["Save"]); if (save)//是保存 { string name = context.Request["Name"]; int age = Convert.ToInt32(context.Request["Age"]); string email = context.Request["Email"]; long classId = Convert.ToInt32(context.Request["ClassId"]); SqlHelper.ExecuteNonQuery("Insert into T_Persons(Name,Age,Email,ClassId) values(@Name,@Age,@Email,@ClassId)", new SqlParameter("@Name", name) , new SqlParameter("@Age", age) , new SqlParameter("@Email", email) , new SqlParameter("@ClassId", classId)); context.Response.Redirect("PersonList.ashx");//保存成功返回列表页面 } else { //string html = CommonHelper.RenderHtml("PersonEdit.htm", new { Name = "", Age = 20, Email = "@rupeng.com" }); //var data = new { Name = "", Age = 20, Email = "@rupeng.com" }; DataTable dtClasses = SqlHelper.ExecuteDataTable("select * from T_Classes"); var data = new { Action = "AddNew", Person = new { Name = "", Age = 20, Email = "@rupeng.com" }, Classes = dtClasses.Rows }; string html = CommonHelper.RenderHtml("PersonEdit.htm", data); context.Response.Write(html); } } else if (action == "Edit") { bool save = Convert.ToBoolean(context.Request["Save"]); if (save) { string name = context.Request["Name"]; int age = Convert.ToInt32(context.Request["Age"]); string email = context.Request["Email"]; long id = Convert.ToInt64(context.Request["Id"]); long classId = Convert.ToInt64(context.Request["ClassId"]); SqlHelper.ExecuteNonQuery("update T_Persons set Name=@Name,Age=@Age,Email=@Email,ClassId=@ClassId where Id=@Id", new SqlParameter("@Name", name) , new SqlParameter("@Age", age) , new SqlParameter("@Email", email) , new SqlParameter("@Id", id) , new SqlParameter("@ClassId", classId)); context.Response.Redirect("PersonList.ashx");//保存成功返回列表页面 } else { long id = Convert.ToInt64(context.Request["Id"]); DataTable dt = SqlHelper.ExecuteDataTable("select * from T_Persons where Id=@Id", new SqlParameter("@Id", id)); if (dt == null || dt.Rows == null || dt.Rows.Count <= 0) { context.Response.Write("没有找到Id=" + id + "的数据"); return; } else if (dt.Rows.Count > 1) { context.Response.Write("找到多条Id=" + id + "的数据"); } else { DataRow row = dt.Rows[0]; DataTable dtClasses = SqlHelper.ExecuteDataTable("select * from T_Classes"); var data = new { Action = "Edit", Person = row, Classes = dtClasses.Rows }; string html = CommonHelper.RenderHtml("PersonEdit.htm", data); context.Response.Write(html); } } } else if (action == "Delete") { long id = Convert.ToInt64(context.Request["Id"]); SqlHelper.ExecuteNonQuery("delete from T_Persons where Id=@Id", new SqlParameter("@Id", id)); context.Response.Redirect("PersonList.ashx"); } else { context.Response.Write("Action参数错误!"); } } public bool IsReusable { get { return false; } } } }