更新 : 2019-06-15 html
目前 razor page 在作 multiple form in one page 的时候有个大局限前端
就是没法使用多个 BindProperty react
一旦多个,那么任何一个 form 提交都会把全部 model 进行 valid git
那就坏掉了github
refer : c#
没有去找 github issue 之后才看看吧。前端框架
目前的作法就不要使用 BindProperty, 代价就是前端没法用 c# binding form. mvc
更新 2019-04-27
最近作了更多的 research 发现微软视乎有意发展 razor page.
razor page 的定位是 mvvm, 如今还有个叫 blazor 的东西, 相似用 c# + razor = react 的概念
从前就以为 react 的 jsx 和 razor 差很少嘛.. 估计微软会往哪里走.
好处应该挺多的,毕竟就目前的技术来看,若是要搞个体验好的电商项目,没有用前端框架是不行的.
若是后端框架能够支持更多交互体验,把实现都封装起来, 必定有些项目是很是适合的.
因此如今开始认真学 razor page 咯.
razor page 其实没有什么特别神奇的功能, 只是调用起来不同而已.
首先, 它是用来处理 page 的, 就是那种返回 html 的 page.
wei api 不算, 返回 file 也不在它的管辖内.
1. router
mvc <a asp-controller asp-action>
razor page <a asp-page asp-handler > , asp-page="Folder/File" 它是按路径的
2. action binding
mvc [FromBody] [FromQuery]
razor page 用的是 [BindProperty] , string value 匹配的是 query string
public class InputModel { public string code { get; set; } } [BindProperty] public InputModel data { get; set; } public void OnPost(string value) { } public void OnPostEdit(string value) { }
refer :
https://www.twilio.com/blog/introduction-asp-net-core-razor-pages
https://www.mikesdotnetting.com/article/327/customising-routing-conventions-in-razor-pages
razor page vs MVC
一般咱们都是拿这 2 者作比较.
mvc 的作法是
route 匹配 controller action (一个 controller action 能够对多个 route template)
由 action 方法的 parameter 接受 inputModel 而后返回 view model
razor page 的作法是
route 匹配一个文件 cshtml 文件. (一个文件也能够对多个 route template, 要在 startup 弄)
这个文件有一个 .cs 对应, 你能够把它当作 controller
它不用 parameter 来接受 inputModel 而是用自身属性 + attribute [BindProperty] 来表示.
而后它自己的属性就是 viewmodel 了.
多个 action 的作法是经过 onPostAbcHandler onPostxyzHandler 来实现的.
玩玩了一下,以为也没有特别高明之处. 尤为个人需求是要语言,须要一个文件对应多个 route template,这点并不给力.
比较厉害的地方应该只有一个,就是 folder 结构能够喜欢怎样开就怎样开吧. 这点我以为比 mvc + ViewLocationExpanders 还要好一点点啦.