分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

步步為營-97-MyMVC3

发布时间:2023-09-06 01:28责任编辑:傅花花关键词:MVC

說明: 解決另外一個不合理之處:通過控制器完成處理

1:在mvc文件夾下面添加一個工廠類文件DefaultControllerFactory

 1.2進一步升級為抽象工廠

 2 下一步如何規範Controller的內容

 2.1 創建一個類RequestContext

2.2 醜行出一個接口

,2.3 創建一個抽象方法實現這個接口

using System;using System.Collections.Generic;using System.Linq;using System.Reflection;using System.Web; namespace YK.Simple.Mvc1.Mvc{ ???public abstract class ControllerBase:IController ???{ ???????protected HttpContext Context { get; set; } ???????protected IDictionary<string, object> RouteData { set; get; } ????????????????public virtual void Execute(RequestContext context) ???????{ ???????????Context = context.HttpContext; ???????????RouteData = context.RouteData; ???????????//獲取ActionName ???????????var actionName = RouteData["action"].ToString(); ???????????#region 找到Action方法對象 ???????????//先找到黨慶類中的所有方法 ???????????var methods = this.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); ???????????MethodInfo method = null; ????????????foreach (var item in methods) ???????????{ ???????????????if (item.Name.Equals(actionName, StringComparison.InvariantCultureIgnoreCase)) ???????????????{ ???????????????????method = item; ???????????????????break; ???????????????} ???????????} ???????????if (method==null) ???????????{ ???????????????throw new HttpException(404, "Not Found"); ???????????} ????????????#endregion ???????????List<object> values = new List<object>(); ???????????var parameters = method.GetParameters(); ???????????foreach (var parameter in parameters) ???????????{ ???????????????var name = parameter.Name; ???????????????var type = parameter.ParameterType; ???????????????//參數來源 1:form 2:queryString 3:RouteData ???????????????var value = Context.Request[name]; ???????????????if (string.IsNullOrEmpty(value)) ???????????????{ ???????????????????value =RouteData.ContainsKey(name)?RouteData[name].ToString():null; ???????????????} ???????????????if (!string.IsNullOrEmpty(value)) ???????????????{ ???????????????????//值類型轉換 ???????????????????values.Add(Convert.ChangeType(value, type)); ???????????????} ???????????????else { ???????????????????values.Add(null); ???????????????} ???????????} ???????????method.Invoke(this, values.ToArray()); ???????} ????????????}}
View Code

 2.4 創建控制器

運行效果 

 3 最後我們不能讓所有的Action都以void的形式返回

3.1 添加ActionResult

3.2 添加RequestContext類

3.3 修改ControllerBase

 3.4

3.5 運行效果

步步為營-97-MyMVC3

原文地址:http://www.cnblogs.com/YK2012/p/7965537.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved