using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.SessionState; namespace DIDAO.Admin.Common
{
public class BaseController : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/html";
//通过反射 封装HttpHandler
//通过寻找方法名 来确定执行方法
//需要约定方法:public void list(HttpContext context) //方法名和action一致
#region 检查用户是否登录
LoginHelper.CheckHasLogin(context);
#endregion
string action = context.Request["action"];
if(action==null)
{
throw new Exception("未找到action:"+action);
}
Type type = this.GetType(); //this是被new的对象,即子类CategoryController等
try
{
MethodInfo method = type.GetMethod(action);
method.Invoke(this, new object[] { context }); //调用this对象的method方法 (参数列表是object[],其中一个参数是context)
}
catch(Exception ex) //如果找不到这个action方法,就说明这个action是错误的/不存在的
{
throw new Exception("未知的action:"+action);
}
} public bool IsReusable
{
get
{
return true;
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;
using DIDAO.Admin.Common;
using DIDAO.BLL;
using DIDAO.Common;
using DIDAO.Model; namespace DIDAO.Admin.Course
{
/// <summary>
/// CategoryController 的摘要说明
/// </summary>
public class CategoryController : BaseController
{
MyORM_BLL myORM_BLL = new MyORM_BLL();
//public void ProcessRequest(HttpContext context)
//{
//context.Response.ContentType = "text/html";
//#region 检查用户是否登录
//LoginHelper.CheckHasLogin(context);
//#endregion
//string action = context.Request["action"];
//if(action=="list") //类别列表
public void list(HttpContext context)
{
#region 类别列表
string pidStr = context.Request["pid"];
int pid = VolidHelper.CheckStrToInt(pidStr);
//要展示类别列表,需要该类别副PID下面没有子类别,确保不会同时存在(子类别和课程)的混乱情况
bool flag = new CourseBLL().CheckHasCourseInPid(pid);
if(flag)
{
RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "该类别ID下面含有课程,不能进行子类别的显示和添加" });
return;
}
//
List<object> list = new CourseBLL().SelectCategoryByPID(pid);
RazorHelper.RazorParse(context, "~/Course/CategoryList.cshtml", new { cates = list, pid = pid });
#endregion
}
//else if(action=="addnew") //新增展示
public void addnew(HttpContext context)
{
#region 新增展示
AdminHelper.CheckHasPower(context, "新增视频类别");
string pidStr = context.Request["pid"];
int pid = VolidHelper.CheckStrToInt(pidStr);
RazorHelper.RazorParse(context, "~/Course/CategoryAlter.cshtml", new { action = "addnew", id = "", no = "", name = "", pid = pid });
#endregion
}
//else if (action == "edit") //编辑展示
public void edit(HttpContext context)
{
#region 编辑展示
AdminHelper.CheckHasPower(context, "编辑视频类别");
string idStr = context.Request["id"];
int id = VolidHelper.CheckStrToInt(idStr);
object obj = myORM_BLL.SelectModelById(typeof(TD_VIDEOCATEGORY), , id);
if (obj == null)
{
RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "未查询到该类别:" + id });
return;
}
TD_VIDEOCATEGORY cate = obj as TD_VIDEOCATEGORY;
RazorHelper.RazorParse(context, "~/Course/CategoryAlter.cshtml", new { action = "edit", id = id, no = cate.NO, name = cate.NAME, pid = cate.PID });
#endregion
}
//else if (action == "disable") //类别禁用
public void disable(HttpContext context)
{
#region 类别禁用
AdminHelper.CheckHasPower(context, "禁用视频类别");
string idStr = context.Request["id"];
int id = VolidHelper.CheckStrToInt(idStr);
string pidStr = context.Request["pid"];
int pid = VolidHelper.CheckStrToInt(pidStr);
//获得类别实例
object obj = myORM_BLL.SelectModelById(typeof(TD_VIDEOCATEGORY), id);
if(obj==null)
{
RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "未查询到该类别:" + id });
return;
}
TD_VIDEOCATEGORY cate = obj as TD_VIDEOCATEGORY;
long currid = (long)LoginHelper.GetSessionID(context);
bool falg = myORM_BLL.DeleteOrDisableModelByUpdateStatus(typeof(TD_VIDEOCATEGORY),,currid,DateTime.Now, id);
AdminHelper.RecordOperateLog(context, "禁用视频类别:" + cate.NAME);
context.Response.Redirect("/Course/CategoryController.ashx?action=list&pid=" + pid);
#endregion
}
//else if(action=="delete") //类别真删除
public void delete(HttpContext context)
{
#region 类别真删除
AdminHelper.CheckHasPower(context, "真删除视频类别");
string idStr = context.Request["id"];
int id = VolidHelper.CheckStrToInt(idStr);
string pidStr = context.Request["pid"];
int pid = VolidHelper.CheckStrToInt(pidStr);
//获得类别实例
object obj = myORM_BLL.SelectModelById(typeof(TD_VIDEOCATEGORY), id);
if (obj == null)
{
RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "未查询到该类别:" + id });
return;
}
TD_VIDEOCATEGORY cate = obj as TD_VIDEOCATEGORY;
//根绝类别Id 真删类别及下面的所有课程
new CourseBLL().DeleteTrueCategoryById(id);
AdminHelper.RecordOperateLog(context, "真删除视频类别:"+cate.NAME);
context.Response.Redirect("/Course/CategoryController.ashx?action=list&pid=" + pid);
#endregion
}
//else if (action == "save") //类别保存
public void save(HttpContext context)
{
#region 类别保存
string saveAction = context.Request["saveAction"];
string noStr = context.Request["no"];
string name = context.Request["name"];
string pidStr = context.Request["pid"];
int pid = VolidHelper.CheckStrToInt(pidStr);
#region 验证 非空及格式
if (!VolidHelper.CheckStringIsAllIntNotComma(noStr))
{
AjaxHelper.WriteJson(context, "error", "序号必须是数字");
return;
}
if (string.IsNullOrWhiteSpace(name))
{
AjaxHelper.WriteJson(context, "error", "请填写类别名称");
return;
}
#endregion
int no = VolidHelper.CheckStrToInt(noStr);
TD_VIDEOCATEGORY cateNew = new TD_VIDEOCATEGORY();
cateNew.DELETEBY = null;
cateNew.DELETEDATE = null;
cateNew.NAME = name;
cateNew.NO = no;
cateNew.STATUS = ;
cateNew.PID = pid;
long currid = (long)LoginHelper.GetSessionID(context); if (saveAction == "addnew") //新增保存
{
#region 新增保存
AdminHelper.CheckHasPower(context, "新增视频类别");
bool flag = new CourseBLL().AddCategory(cateNew,currid);
if (!flag)
{
AjaxHelper.WriteJson(context, "error", "新增视频类别失败:" + name);
return;
}
AdminHelper.RecordOperateLog(context, "新增视频类别:"+name);
AjaxHelper.WriteJson(context, "ok", "新增视频类别 成功");
#endregion
}
else if (saveAction == "edit") //编辑保存
{
#region 编辑保存
AdminHelper.CheckHasPower(context, "编辑视频类别");
string idStr = context.Request["id"];
int id = VolidHelper.CheckStrToInt(idStr);
bool flag = new CourseBLL().EditCategory(cateNew, id,currid);
if (!flag)
{
AjaxHelper.WriteJson(context, "error", "编辑视频类别失败:" + name);
return;
}
AdminHelper.RecordOperateLog(context, "编辑视频类别:" + name);
AjaxHelper.WriteJson(context, "ok", "编辑视频类别 成功");
#endregion
}
else
{
throw new Exception("未知的saveAction:" + saveAction);
}
#endregion
}
//else
//{
// throw new Exception("未知的action:"+action);
//}
//} //public bool IsReusable
//{
// get
// {
// return false;
// }
//}
}
}

CategoryController.cs

用反射封装HttpHandler,实现通过action方法名调用方法的更多相关文章

  1. Delphi根据方法名调用方法

    type   TForm1 = class(TForm) public published     procedure DoJsCall(str:string);                   ...

  2. C# 反射,通过类名、方法名调用方法

    在 C# 代码中,有些时候只知道方法的名字(string),需要调用该方法,那么就需要用到 C# 的反射机制.下面是一个简单的 demo. using System; using System.Ref ...

  3. C# 核心语法-反射(反射类型、方法、构造函数、属性,实现可配置可扩展,完成数据库访问类反射封装)

    反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息.有了反射,即可对每一个类型了如指掌.另外我还可以直接创建对象,即使 ...

  4. C#—反射(反射类型、方法、构造函数、属性、实现可配置可扩展、数据库访问类反射封装)

    反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息.有了反射,即可对每一个类型了如指掌.另外我还可以直接创建对象,即使 ...

  5. struts_19_对Action中所有方法、某一个方法进行输入校验(手工编写代码实现输入校验)

    对所有方法进行校验1.通过手工编写代码的形式实现 需求:用户名:不能为空手机号:不能为空,并且要符合手机号的格式1,3/5/8,后面是9个数字 第01步:导包 第02步:配置web.xml <? ...

  6. struts2封装客户端数据到Action

    1.在Action中定义简单数据类型的属性 给Action定义简单类型的属性,封装客户端请求的数据 简单类型:String,基本类型和对应的引用类型 只要保证客户端请求的参数名称和Action的属性名 ...

  7. 详解Webwork中Action 调用的方法

    详解Webwork中Action 调用的方法 从三方面介绍webwork action调用相关知识: 1.Webwork 获取和包装 web 参数 2.这部分框架类关系 3.DefaultAction ...

  8. struts2对action中的方法进行输入校验(2)

    struts2输入校验流程: 1.类型转换器对请求參数运行类型转换,并把转换后的值赋给aciton中的属性 2.假设在运行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext, ...

  9. 【Struts2学习笔记(11)】对action的输入校验和XML配置方式实现对action的全部方法进行输入校验

    在struts2中,我们能够实现对action的全部方法进行校验或者对action的指定方法进行校验. 对于输入校验struts2提供了两种实现方法: 1. 採用手工编写代码实现. 2. 基于XML配 ...

随机推荐

  1. copy deepcopy辨析

    copy deepcopy讲的是复制源对象的改变对copy出来的对象的影响: 我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在. 所以改变原有被复制对象不会对已经复制 ...

  2. python:列表的方法

    注意:在列表的类方法一般是没有返回值的,如果将处理过的列表给新变量,新变量是空类型.如:>>>a=[1,2]>>>b=a.append(3)>>> ...

  3. 20145230《java学习笔记》第七周学习总结

    20145230 <Java程序设计>第7周学习总结 教材学习内容 Lambda语法概览 我们在许多地方都会有按字符串长度排序的需求,如果在同一个方法内,我们可以使用一个byName局部变 ...

  4. matplotlib模块之plot画图

    关于matplotlib中一些常见的函数,https://www.cnblogs.com/TensorSense/p/6802280.html这篇文章讲的比较清楚了,https://blog.csdn ...

  5. mongodb 中的Multikey Index Bounds解释$elemMatch

    首先说一下 $elemMatch的用法: { _id: 1, results: [ 82, 85, 88 ] } { _id: 2, results: [ 75, 88, 89 ] } $elemMa ...

  6. Complex social network Partition for Balanced Subnetworks---Hao Lan Zhang,Jiming Liu,Chunyu Feng,Chaoyi Pang,Tongliang Li,Jing He阅读

    摘要:Abstract—Complex social network analysis methods have been applied extensively in various domains ...

  7. Variation calling and annotation

    Resequencing 302 wild and cultivated accessions identifies genes related to domestication and improv ...

  8. 【转】Android ImageView圆形头像

    Android ImageView圆形头像 图片完全解析 我们在做项目的时候会用到圆形的图片,比如用户头像,类似QQ.用户在用QQ更换头像的时候,上传的图片都是矩形的,但显示的时候确是圆形的. 原理: ...

  9. vue中编辑代码是不注意格式时会报错

    1.是因为我们使用了eslint的代码规范,我们不要使用这种规范就好 2.在build目录下找到webpack.base.conf.js 在里面找到关于eslint的相关配置注释或移除掉就好

  10. boot小知识

    lg 大, md 中等, sm 小, xs 极小. 可以单独用,也可以混合用,不同的屏幕用不同的比例. push ,pull 推拉.这个不实用. row里面可以嵌套实用row. 挤不下的时候,就会自动 ...