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. jq中ajax的dataType:"json"是指什么?

    dataType String 预期服务器返回的数据类型.如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如XML MIME类型就被识别为XML.在1.4中,JSON就 ...

  2. Object.defineProperty小解

    最早认识这个函数,源于对vue双向绑定的探索,vue通过这个函数实现属性挟持并结合发布者-订阅者模式实现双向绑定 先看一个实例: var o= {name: 'a'} Object.definePro ...

  3. package.json字段简要解析

    name 必填 应用名称 version 必填 应用版本 description 选填 应用描述,多用于搜索,在npm search 时可以用到 keywords 选填 应用关键字,也多用于搜索 sc ...

  4. Cocos2d-x项目移植到WP8系列之八:CCLabelTTF显示中文不换行

    原文链接: http://www.cnblogs.com/zouzf/p/3985330.html 在wp8平台上,CCLabeTTF显示中文不会自动换行,看了下源码,原来底层的实现是根据text的空 ...

  5. echache缓存的简单使用方法

    1.需要echache的jar包 2.需要配置文件ehcache.xml和ehcache.xsd,主要是在ehcache.xml中进行配置 3.修改配置文件ehcache.xml  ,例如添加配置如下 ...

  6. [转载]ORA-00313:无法打开日志组1(线程 1)的成员_ORA-00312:

    原文地址:1)的成员_ORA-00312:">ORA-00313:无法打开日志组1(线程 1)的成员_ORA-00312:作者:Sweet_薇薇毅 今天用系统清理工具把系统垃圾清理了一 ...

  7. Python3一些包的下载

    首先在windows的Python扩展包网址:http://www.lfd.uci.edu/~gohlke/pythonlibs/ 这里举例下载opencv3.2.0的安装包 我的电脑是win10,6 ...

  8. STL视频_02

    [01:05]主要讲一下几个要点: 1.模板.函数模板 类模板 以及它们的用法 2.容器.什么是容器 和 容器的分类,各种容器的数据结构 3.容器vector的具体用法,包括迭代器的具体用法 [01: ...

  9. Node.js_HTTP模块

    HTTP服务器与客户端 http是node提供的模块,其中封装了一个高效的HTTP服务器和一个简易的HTTP客户端.http.server是一个基于事件的HTTP服务器,http.request则是一 ...

  10. MLPClassifier 隐藏层不包括输入和输出

    多层感知机(MLP)原理简介 多层感知机(MLP,Multilayer Perceptron)也叫人工神经网络(ANN,Artificial Neural Network),除了输入输出层,它中间可以 ...