ps做的网站首页vps 网站权限

bicheng/2026/1/24 13:11:59/文章来源:
ps做的网站首页,vps 网站权限,榆林百度seo,徐州建设工程交易网中标公示ASP.NET MVC 引入了 ModelBinder 技术#xff0c;让我们可以在 Action 中以强类型参数的形式接收 Request 中的数据#xff0c;极大的方便了我们的编程#xff0c;提高了生产力。在查询 Action 中#xff0c;我们可以将 Expression Trees 用作参数#xff0c;通过自定义的…ASP.NET MVC 引入了 ModelBinder 技术让我们可以在 Action 中以强类型参数的形式接收 Request 中的数据极大的方便了我们的编程提高了生产力。在查询 Action 中我们可以将 Expression Trees 用作参数通过自定义的 ModelBinder 动态自动构建查询表达式树进一步发挥 MVC 的威力简化编码工作。   MVC 查询和存在的不足 下面是一个查询 Employee 的 Action在 MVC 项目中经常可以见到 public ActionResult Index(string firstName, string lastName, DateTime? birthday, bool? sex) {var employees repository.Query();if (firstName.IsNotNullAndEmpty()) employees employees.Where(e e.FirstName.Contains(firstName));if (firstName.IsNotNullAndEmpty()) employees employees.Where(e e.LastName.Contains(lastName));if (birthday.HasValue) employees employees.Where(e e.Birthday.Value.Date birthday.Value.Date);if (sex.HasValue) employees employees.Where(e e.Sex sex);return View(employees); } 得益于 MVC 的绑定技术我们可以简单通过 Action 的参数来获取请求的值很少再使用 Request[XXXX] 的方式。   仔细观察会发现上面这个 Action 中充斥着大量 if 判断以致代码行数比较多不是特别清晰。   public ActionResult Index2(string firstName, string lastName, DateTime? birthday, bool? sex) {var employees repository.Query().WhereIf(e e.FirstName.Contains(firstName), firstName.IsNotNullAndEmpty()).WhereIf(e e.LastName.Contains(lastName), lastName.IsNotNullAndEmpty()).WhereIf(e e.Birthday.Value.Date birthday.Value.Date, birthday.HasValue).WhereIf(e e.Sex sex, sex.HasValue);return View(Index, employees); } 代码相清晰了许多我之前的几个 MVC 项目中也是这样处理的。 但时间一长我逐步也发现了这种方式一些不足之处 首先网站中有很多类似的查询如Customer、Order、Product 等等。而且大致也有点规律字符串的一般模糊查询时间日期类的一般按日期查询忽略时间其它类型则相等查询。不同 Model 查询的 Action 编码总有八、九分相似但又不是简单的重复却又难以重构。需求变动如增加一个查询条件修改 View 是必须的但也要修改 Action增加一个参数还要加一行 Where 或 WhereIf。简单变动却多处修改烦人啊而且这种需求变动又是比较频繁的尤其是在项目初期。若能只修改 View 而不修改 Action 就爽了。思考后我决定使用 Expression Trees 作为查询 Action的参数来弥补这些不足。 使用 ExpressionFuncT, bool 作为 Action 的参数 public ActionResult Index3(ExpressionFuncEmployee, bool predicate) {var employees repository.Query().Where(predicate);return View(Index, employees); } 将 Expression Trees 作为 Action 的唯一的参数暂不考虑分页、排序等将所有的查询条件都统一汇集至  predicate 参数。 所有的查询不管是 Employee 还是 Customer都使用如上代码。其它实体查询只需修改参数的类型如 Customer 查询改为 ExpressionFuncCustomer, bool 。 如上修改代码后直接运行会报错因为 MVC 中默认的数据绑定器 DefaultModelBinder 不能正确绑定 ExpressionFuncT, bool 类型的参数。 我们要新创一个新的 ModelBinder。 创建 QueryConditionExpressionModelBinder  需要一个新的 ModelBinder 来为 ExpressionFuncT, bool 类型的参数赋值且命名为 QueryConditionExpressionModelBinder。 QueryConditionExpressionModelBinder 要根据上下文来自动生成查询的 Expression Trees。主要关注的上下文有两点首先是当前 Model 的类型即 typeof(T)其次是 Request 提供的值可通过 ValueProvider 获取。 下面给出一个粗略实现仅用来说明这个思路是可行的 public class QueryConditionExpressionModelBinder : IModelBinder {public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {var modelType GetModelTypeFromExpressionType(bindingContext.ModelType);if (modelType null) return null;var body default(Expression);var parameter Expression.Parameter(modelType, modelType.Name);foreach (var property in modelType.GetProperties()){var queryValue GetValueAndHandleModelState(property, bindingContext.ValueProvider, controllerContext.Controller);if (queryValue null) continue;Expression proeprtyCondition null;if (property.PropertyType typeof (string)){if (!string.IsNullOrEmpty(queryValue as string)){proeprtyCondition parameter.Property(property.Name).Call(Contains, Expression.Constant(queryValue));}}else if (property.PropertyType typeof (DateTime?)){proeprtyCondition parameter.Property(property.Name).Property(Value).Property(Date).Equal(Expression.Constant(queryValue));}else{proeprtyCondition parameter.Property(property.Name).Equal(Expression.Constant(queryValue));}if (proeprtyCondition ! null)body body ! null ? body.AndAlso(proeprtyCondition) : proeprtyCondition;}if (body null) body Expression.Constant(true);return body.ToLambda(parameter);}/// summary/// 获取 ExpressionFuncTXXX, bool 中 TXXX 的类型/// /summaryprivate Type GetModelTypeFromExpressionType(Type lambdaExpressionType) {if (lambdaExpressionType.GetGenericTypeDefinition() ! typeof (Expression)) return null;var funcType lambdaExpressionType.GetGenericArguments()[0];if (funcType.GetGenericTypeDefinition() ! typeof (Func,)) return null;var funcTypeArgs funcType.GetGenericArguments();if (funcTypeArgs[1] ! typeof (bool)) return null;return funcTypeArgs[0];}/// summary/// 获取属性的查询值并处理 Controller.ModelState /// /summaryprivate object GetValueAndHandleModelState(PropertyInfo property, IValueProvider valueProvider, ControllerBase controller) {var result valueProvider.GetValue(property.Name);if (result null) return null;var modelState new ModelState {Value result};controller.ViewData.ModelState.Add(property.Name, modelState);object value null;try{value result.ConvertTo(property.PropertyType);}catch (Exception ex){modelState.Errors.Add(ex);}return value;} } 如果不想在 Global.asax 文件中设置 ExpressionFuncT, bool 的 ModelBinder 可以借助用下面这个 Attribute 类 public class QueryConditionBinderAttribute : CustomModelBinderAttribute {public override IModelBinder GetBinder() {return new QueryConditionExpressionModelBinder();} } Index3 简单修改如下 public ActionResult Index3([QueryConditionBinder]ExpressionFuncEmployee, bool predicate) { //... }      转载于:https://www.cnblogs.com/wd0730/p/3213457.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站知识架构腾讯云做wordpress太卡

视频链接: 视频 代码链接: 源码 在C#中,静态类(Static Class)和静态方法(Static Method)是面向对象编程中的重要概念。它们允许你创建不依赖于对象实例的方法和属性,而是直接通过类名来访问。 静态类 静…

营销网站制作企业虚拟主机网站建设步骤?

原文作者:心莱科技肖鑫简单来说机器学习的核心步骤在于“获取学习数据;选择机器算法;定型模型;评估模型,预测模型结果”,下面本人就以判断日报内容是否合格为例为大家简单的阐述一下C#的机器学习。第一步&a…

企业网站如何设计网页网站建设报价表模板

Python遥感开发之批量拼接 1 遥感图像无交错的批量拼接2 遥感图像有交错的批量拼接 前言:主要借助python实现遥感影像的批量拼接,遥感影像的批量拼接主要分为两种情况,一种是遥感图像无交错,另一种情况是遥感图像相互有交错。具体…

电子商务网站建设和运营1688阿里巴巴官网

全世界只有3.14 % 的人关注了爆炸吧知识首先来看你绝对干过的15件傻事儿,别不承认!把树叶弄成这样喝酸奶舔盖子吃完棒冰继续含着棍子咬拉链尝试用笔写一首歌比如《生日快乐》对着电风扇说话或喊叫刮墙壁上的油漆过斑马线只踩白色部分猫打哈欠时伸手指进去…

网页内容沧州网站优化

数据类型之Integer与int Java入门 基本数据类型 众所周知,Java是面向对象的语言,一切皆对象。但是为了兼容人类根深蒂固的数据处理习惯,加快常规数据的处理速度,提供了9种基本数据类型,他们都不具备对象的特性&#xf…

国内网站设计公司做网站是58好还是百度好

在HTML中&#xff0c;如果你想动态设置下拉选项&#xff08;<select>元素中的<option>&#xff09;&#xff0c;你可以使用JavaScript。以下是一个示例&#xff0c;展示了如何使用JavaScript来动态添加下拉选项&#xff1a; <!DOCTYPE html> <…

企业门户网站建设管理制度网站如何设置域名

目录 基本介绍 安装添加模块 模块配置指令 基本介绍 nginx的memcached_module模块可以直接从memcached服务器中读取内容后输出&#xff0c;后续的请求不再经过应用程序处理&#xff0c;如php-fpm、django&#xff0c;大大的提升动态页面的速度。nginx只负责从memcach…

wordpress关闭多站点网站的站点的管理系统

跟着施磊老师做C项目&#xff0c;施磊老师_腾讯课堂 (qq.com) 一、基于muduo网络库开发服务器程序 组合TcpServer对象创建EventLoop事件循环对象的指针明确TcpServer构造函数需要什么参数,输出ChatServer的构造函数在当前服务器类的构造函数当中,注册处理连接的回调函数和处理…

网站设计排版怎么做长沙seo网站管理

每天五分钟分享一个电商模式&#xff0c;大家好我是商业模式策划啊浩。 今天给大家分享的模式叫作“二二复制”&#xff0c;我有一个客户通过我给他设计的这套模式实现销量破千万&#xff0c;大家如果对此感兴趣的话把自己的问题记录下来&#xff0c;看完文章后留言到评论区&am…

莱芜最好的网站建设公司wordpress 页面 插件

Github分支开发&#xff1a; 第1步&#xff1a;在github上创建一个新的dev分支&#xff1a; 更新了微信的PC版本&#xff0c;发现默认的箭头比以前加粗了&#xff0c;变得更好看了。 create branch: dev from master。 切换到该分支&#xff0c;看到里面的内容跟master分支的…

国内优秀网站网址怎样进行文化建设

文章主题&#xff1a;复杂度详解&#x1f331;所属专栏&#xff1a;深入理解数据结构&#x1f4d8;作者简介&#xff1a;更新有关深入理解数据结构知识的博主一枚&#xff0c;记录分享自己对数据结构的深入解读。&#x1f604;个人主页&#xff1a;[₽]的个人主页&#x1f525;…

网站整站模板江西网站建设

【C语言】——指针七&#xff1a; 前言一、 s i z e o f sizeof sizeof 与 s t r l e n strlen strlen 的对比1.1、 s i z e o f sizeof sizeof1.2、 s t r l e n strlen strlen1.3、 s i z e o f sizeof sizeof 和 s t r l e n strlen strlen 对比 二、数组和指针笔试题解析…

汝州市住房和城乡建设局网站小程序源码教程

free &#xff1a;观察内存使用情况 系统当中有 2848MB 左右的实体内存&#xff0c;我的 swap 有 1GB 左右&#xff0c; 那我使用free -m 以 MBytes 来显示时&#xff0c;就会出现上面的信息。Mem 那一行显示的是实体内存的量&#xff0c;Swap 则是内存交换空间的量。 total 是…

数据网站建设成本山东省住房城乡建设部网站

试卷代号&#xff1a;1260 软件工程 试题&#xff08;半开卷&#xff09; 2019年7月 一、选择题&#xff0c;请从四个可选项中选择正确答案。&#xff08;60分&#xff0c;每题3分&#xff09; 1.以下哪一项不是软件危机的表现形式&#xff08; &#xff09;。 A.成本高 B.生产…

网站都需要什么类别秦皇岛网站制作小程序开发

提示&#xff1a;接上文 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0…

做pc端网站案例网站开发涉及到缓存吗

1.1 ZooKeeper 是什么 ZooKeeper 是 Apache 的顶级项目。ZooKeeper 为分布式应用提供了高效且可靠的分布式协调服务&#xff0c;提供了诸如统一命名服务、配置管理和分布式锁等分布式的基础服务。在解决分布式数据一致性方面&#xff0c;ZooKeeper 并没有直接采用 Paxos 算法&…

wordpress网站移植wordpress ip检测

原文网址&#xff1a;Java之泛型系列--继承父类与实现多个接口(有示例)_IT利刃出鞘的博客-CSDN博客 简介 本文介绍java如何用泛型表示继承父类并实现多个接口。 用泛型表示某个类是某个类的子类或者实现了接口的方法为&#xff1a;<T extends A & B & C> 用…

企业网站建设 信息安全wordpress 获取当前位置

1. 模版法 该方法历史悠久&#xff0c;具体处理流程为采用一个html模版&#xff0c;将其中的关键字替换为我们希望的信息。 优点: 缺点: 所有的信息都要采取字符串批凑的方式来实现&#xff0c;比如需要一个列表&#xff0c;就需要拼凑字符串。问题是开发周期长&…

淮安网站建设服务wordpress上传ftp失败

Matplotlib颜色条配置 基本颜色颜色条选择配色方案颜色条刻度的限制与扩展功能的设置离散型颜色条 基本颜色 Matplotlib提供了8种指定颜色的方法&#xff1a; 在[0&#xff0c;1]中的浮点值的RGB或RGBA元组&#xff08;例如 (0.1, 0.2, 0.5) 或&#xff08;0.1&#xff0c; 0.…

嘉兴网站建设多少钱网络推广网站排名

随着科技的不断进步&#xff0c;API开发领域也逐渐呈现出蓬勃发展的势头。今天我将向大家介绍API接口&#xff0c;电商API接口具备独特的特点&#xff0c;使得数据获取变得更加高效便捷。 快速获取API数据——优化数据访问速度 传统的数据获取方式可能需要经过多个中介环节&…