日期:2014-05-17  浏览次数:20420 次

求教更好的MVC3模型绑定方式
按照官方说明MVC自带的值提供器可以处理以下数据源中的数据
1 子操作的显示值
2 表单值
3 来自XMLHttpRequest的JSON数据
4 路由值
5 查询字符串值
6 上传文件
这里面大多项目中用表单和Json的比较多,用通俗的话来说就是,表单传值,或者JSON传值

这两个在使用上没有任何问题,但在实际使用中想象一个很常见的场景

一个cshtml的页面是强类型的,它的类型是一个相对较复杂的聚合对象,里面假设有20个一般属性和4个列表属性
这个页面现在实现保存数据的功能,需要把页面上的值传递到controller中某action方法的参数

如果采用通过表单传值的方式,那么那些列表就很难传递,每个列表都是二维的,而且列表的数据在页面中是动态的,随时加一条,删一条。

如果采用JSON的方式,那么去构造一个javascript的弱类型对象的实例,通过JSON传过去,是没有任何技术难度的,但是去填充这个实例编程一件非常枯燥无谓且编码量极大的工作。

我希望大家如果有更好的方法能够不吝赐教,先表示感谢。

另外说明这个问题的现实意义,拿一个10000行代码的小系统来说,据我项目验收后统计,普遍意义上的DAL层,占用大约将近35%上下的代码,这里查询我使用的企业库的原因,剩余30%的代码基本上耗费在前端JS的处理,其中估计大约60%以上用来构造那个javascript的实例,因此这个问题的解决能大额提升团队开发效率。
MVC?模型绑定

------解决方案--------------------
首先,有个问题要搞清楚,列表页是列表页,详细页是详细页,列表页通常是不包含所谓属性列表的处理提交,最多也就是 条件查询 ,批量删除等,而具体模型的保存修改应该是在详细页

如果真的包含那样的情况,在一个列表页里,要对多条数据实现修改,保存操作,那么可以利用JS遍历列表,然后组合成后台能够正常解析成对应模型的List,提交给control,然后解析处理

数据量太大,你可以采取分页,一页一页的提交,而不是所有数据
------解决方案--------------------
推荐你使用 Knockout.js 一个强大的MVVM JS框架。绑定是框架完成的

http://code.msdn.microsoft.com/ASPNET-Web-API-JavaScript-d0d64dd7
------解决方案--------------------
加装一个vs插件即可Web Essentials,这个插件可以去vs的插件中心下Web Essentials

这个插件其中一个具体的功能在你粘贴复制json格式可以直接在vs生成对于的C#对象

插件地址
http://visualstudiogallery.msdn.microsoft.com/07d54d12-7133-4e15-becb-6f451ea3bea6