受够了if (ModelState.IsValid)?ActionFitlter也是一路的坑啊!
2017-05-17 23:35
387 查看
这篇博客真是干货,干得估计还有点“磕牙”,所以还提供视频和代码。但基础稍弱的同学,怕还是得自行补充一些基础知识——就一篇文章,确实没办法面面俱到。
视频和代码下载:Demo - 百度云盘 · 一起帮
参考原文:Automatic ModelState validation in ASP.NET MVC(英文强,基础好的同学可以直接看原文了)。
缘起
我忘了是不是在园子里讲过,我命名为“截断式编程”的写法。其主要目的,就是把简单的、过滤条件、“非主干的”逻辑放在最前面。比如在ASP.NET MVC的Action中,处理POST时,我们通常都要进行服务端验证,于是我们就可以这样写:
View Code
就这么简单,完美!回味无穷。
其实,在POST的Action里return View();并不是一个好套路。
在我的项目我就发现了这么一个问题:当return的View()里还含有@Html.Action()调用,且该调用需要区分GET和POST时,会进入POST所属的ChildAction,这肯定是不符合逻辑的。(表述起来好吃力!慢慢看,一边看一边想,想不明白的看视频吧……)
题外话
磨蹭了一天,终于写完了。
写得好累,感觉写这一篇文章比那90分钟的视频还累,难怪现在好多开源项目都没文档,直接上视频了……
最后说说“一起帮”吧,现在已经被当初的乞丐版强多了,隔三差五的也有同学在上面提问,算是有些生气了,但人气还是远远的不够,根据QQ群里投票结果,现在主要精力应放在做推广上。
推广了好几天了,有点效果,但唉呀我的妈呀!这推广,比写这篇博客还累,咋整?
园子里就不说这些了。“酒向知己饮,诗向会人吟”,以后博客园只会讲技术,这也是博客园欢迎的。想聊点编程以外的,欢迎加QQ群:
179742319(付费入群抢红包),312423951(验证入群)
以及关注微信公众号:我们一起帮。
感谢评论区
@敲代码的吃货:
如果采用PRG的方案,就不能达到你的要求:“把提交上来的数据再次呈现以便修改的”。要满足这种需求,只能在POST里return View(model); model里是带着之前数据的。
@stoneniqiu:
该方案的优势不是“减少”代码量,而是从架构层面,解决POST中return View(); 造成的空异常问题。
视频和代码下载:Demo - 百度云盘 · 一起帮
参考原文:Automatic ModelState validation in ASP.NET MVC(英文强,基础好的同学可以直接看原文了)。
缘起
我忘了是不是在园子里讲过,我命名为“截断式编程”的写法。其主要目的,就是把简单的、过滤条件、“非主干的”逻辑放在最前面。比如在ASP.NET MVC的Action中,处理POST时,我们通常都要进行服务端验证,于是我们就可以这样写:
/// <summary> /// Exports the current ModelState to TempData (available on the next request). /// </summary> protected static void ExportModelStateToTempData(ControllerContext context) { context.Controller.TempData[Key] = context.Controller.ViewData.ModelState; } /// <summary> /// Populates the current ModelState with the values in TempData /// </summary> protected static void ImportModelStateFromTempData(ControllerContext context) { var prevModelState = context.Controller.TempData[Key] as ModelStateDictionary; context.Controller.ViewData.ModelState.Merge(prevModelState); }
View Code
就这么简单,完美!回味无穷。
其实,在POST的Action里return View();并不是一个好套路。
在我的项目我就发现了这么一个问题:当return的View()里还含有@Html.Action()调用,且该调用需要区分GET和POST时,会进入POST所属的ChildAction,这肯定是不符合逻辑的。(表述起来好吃力!慢慢看,一边看一边想,想不明白的看视频吧……)
题外话
磨蹭了一天,终于写完了。
写得好累,感觉写这一篇文章比那90分钟的视频还累,难怪现在好多开源项目都没文档,直接上视频了……
最后说说“一起帮”吧,现在已经被当初的乞丐版强多了,隔三差五的也有同学在上面提问,算是有些生气了,但人气还是远远的不够,根据QQ群里投票结果,现在主要精力应放在做推广上。
推广了好几天了,有点效果,但唉呀我的妈呀!这推广,比写这篇博客还累,咋整?
园子里就不说这些了。“酒向知己饮,诗向会人吟”,以后博客园只会讲技术,这也是博客园欢迎的。想聊点编程以外的,欢迎加QQ群:
179742319(付费入群抢红包),312423951(验证入群)
以及关注微信公众号:我们一起帮。
感谢评论区
@敲代码的吃货:
如果采用PRG的方案,就不能达到你的要求:“把提交上来的数据再次呈现以便修改的”。要满足这种需求,只能在POST里return View(model); model里是带着之前数据的。
@stoneniqiu:
该方案的优势不是“减少”代码量,而是从架构层面,解决POST中return View(); 造成的空异常问题。
相关文章推荐
- if(modelstate.isvalid)这句话是啥意思呀????求解释!!!!!
- ASP.NET MVC单元测试时如何对含有ModelState.IsValid的Action进行测试
- 为什么mvc里面的ModelState.IsValid一只都是true
- 2016年10月25 草堂随笔1 ModelState.IsValid
- ASP.NET MVC3 ModelState.IsValid为false的问题
- modelstate.isvalid false
- ModelState.IsValid总为false原因
- MVC 2 的验证问题:ModelState.IsValid
- ModelState.IsValid always returning true while mocking a request
- ASP.NET MVC3 ModelState.IsValid为false的问题
- ModelState.IsValid
- ModelState.IsValid 验证时忽略某些字段验证
- ModelState.IsValid
- ModelState.IsValid
- Effective C# Item 8: Ensure That 0 Is a Valid State for Value Types
- eclipse maven error: Archive for required library in project cannot be read or is not a valid ZIP fi
- How To Determinate If An EMCPOWER Partition Is Valid For ASMLIB
- vagrant up error: Valid states are 'starting, running'. The machine is in the 'poweroff' state 解决
- System.InvalidOperationException: Operation is not valid due to the current state of the object.
- Leetcode:Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.