.net MVC4使用心得(二) Filter、EditorFor、通用类
来源:互联网 发布:美工如何压缩上传文件 编辑:程序博客网 时间:2024/04/28 14:17
继续谈今天遇到的各种问题
首先是使用Filter,利用框架自带的ValidateAntiForgeryTokenAttribute可以验证提交的表单是否从页面上来。具体实现机制是,在view,调用Html.AntiForgeryToken()实现生成两个Token(token1),一个存入Cookie(tonken2),一个直接写入表单。在提交表单时,token2会跟随其他field一起提交至后台,后台使用filter,校验post过来的tonken2和cookie中保存的token1是否匹配(两个token并不相同,经过了一些算法变换,当然也可以自己重写这些毛线)。开始饶了点弯子,我在js上传的时候也做了这个验证,服务器总是返回500(居然不是403),后台代码一步未执行,后来才意识到,上传提交的仅仅是file,并未将form提交,于是token1也未提交至服务器,所以出错(大约是因为没有找到token1所以导致500)。后来遇到的问题,更新entity,添加两个不需要验证的字段,却无法提交到后台,也是这个token作的祟。
接下来,问题是,用EditorFor的时候,希望给生成的input添加点属性,于是想当然的写了第二个参数new { @class="txt" } 。调试时候才发现,样式未起作用。回头来看EditorFor的重载,翻遍一圈,没发现有带htmlAttributes的。换个玩吧,改用TextBoxFor,很好,有了,添加class成功。但是,针对不同数据类型的Html5 input标签却没有了(比如,int型会生成type为number的input)。看来想不费事儿就解决这个矛盾是不好做了。三种思路:一是用TextBoxFor,即用type为text的input,然后用jquery插件自己绑定input的行为;二是用EditorFor,样式全部用选择器定位来写,而不用class,对于input样式较为统一的比较适合,即便如此还是要用到css对input的不同type提供不同样式的技术。三是通过查看生成的html代码,发现input被EditorFor增加了很多class,直接针对相应class写样式,但是,当页面上如果有多个不同区域的表单,每个表单的样式不尽相同,则可能要在选择器上做些铺垫,比如某id下面的相应class,而且,你会惊奇的发现,PasswordFor产生的input是不含class的…… 其实第二种跟第三种并无本质区别,而第一种的好处是对不支持html5的浏览器,控件行为一样可以很好的发挥。这里我选择了第二种。
再接下来遇到的问题是,通用代码的存放问题。mvc构架将m、v、c分离,本来挺好的,但是,有时会需要写一些通用的方法,比如封装加密等等(不要问我为什么不用filter),这些可能需要在任何controller都可以调用,甚至model也可以调用。通用代码,在webform时代可以写在App_Code里。于是,我也添加了个App_Code文件夹,将类写在里面。回到controller,引用,找不到。回去看了下类定义,命名空间为 项目名称.App_Code, 回到controller添加using。很好,命名空间找不到。回到类里删除命名空间,依然找不到类。那么到底放到哪里好呢,总不能放model里吧。好吧,直接在要使用的地方打出类名,然后ctrl+.,没有自动引用选项,只有添加新类。那我就看看新类被添加到哪儿去了:生成的类放在了controller下面,只是没有继承Controller。原来通用类也要写在controller里了,app_code和mvc不是一套东西,context不同(正在app_code下using System.Web.Mvc也是无法找到)。所以,在controller下面,专门新建一个文件夹Common,用来存放通用类代码。 注意,每新建一个文件夹,事实上就添加了一个命名空间,比如我添加的这个,命名空间是 项目名称.Controllers.Common。至于直接在根目录下建立文件夹,然后将cs建在里面,似乎也可以,但我没试过,主要是担心发布的时候会把发布出一个多余文件夹。
另外要记录一下自己已经养成的个人习惯:通用代码放在controllers下的Common目录;所有跟页面交互需要验证的model放在models下面的ViewModels目录,这包括所有的表实体对应的元数据;所有返回json/xml的返回结果强类型放在models下面的Results目录;Content下面针对不同内容分不同文件夹,css文件和图片放在同一文件夹,而不是单独放在images下,bundle绑定也不更改路径,以保证Bundle对css做整合和压缩后图片文件路径正确。
- .net MVC4使用心得(二) Filter、EditorFor、通用类
- .Net MVC4 被坑心得(七)filter 身份验证
- .Net MVC4 使用心得(三)实现分页控件
- .Net MVC4 使用心得(四)分页、Partial View、删除、ajax返回
- .Net MVC4 使用心得(五)细节问题Url.Action和Html.ActionLink
- .Net MVC4 使用心得(六)WebApi Json和Xml,razor@{}
- .Net MVC4 使用心得(五)细节问题Url.Action和Html.ActionLink
- .Net MVC4 被坑心得(七)WebApi种种
- .Net MVC4 使用心得(一)使用uploadify和wcf存储服务时的文件上传问题
- .NET通用访问数据库类(二)
- Elasticsearch.Net使用(二)【MVC4 图书管理系统】
- filter 使用心得
- asp.net mvc源码分析-EditorFor
- .Net MVC4 被坑心得(十)解决jquery调用webapi时跨域问题
- 通用filter工具类
- 用@Html.EditorFor在MVC3中封装带表单(Form)提交的分页控件(通用代码)
- .NET MVC4中使用KindEditor文本编辑器 【教程】(网搜加问人)
- sqlapi 使用心得(二)
- linux oracle 乱码
- JSTL标签库
- 抽奖
- cocos2d 中用 图片数字 作为 Lable 显示
- ExtJS 4 类系统(Class System)介绍
- .net MVC4使用心得(二) Filter、EditorFor、通用类
- CoreAnimation编程指南(三)几何变换
- DES算法加密
- Myeclipse 9 的jquery代码提示设置
- 每当网站被攻击程序被人更改了以后你应该怎么办
- 在Android系统中添加对新遥控器按键的支持
- linux文件操作函数
- 三极管管脚判别
- 手动建库