MVC3自动封装实体更新数据的问题

啊兵 2013-05-28 11:33:39
1.数据库有40个字段
2.通过代码生成器生成了一个更新数据的方法UpdateData(Model model)[通过主键更新每个字段]
3.视图有10个字段提供给用户输入

用户提交数据到控制器Update(Model model)方法,此方法接受Model对象。


现在问题来了:
如果要使用更新的数据的方法UpdateData,如何去封装这个Model实体?因为视图只提供了10个字段给控制器。

现在能想到的解决方案:

1.重写一个更新数据的方法,此方法只更新这10个字段。问题解决,但如果视图再增加1个字段,那么又要增加一个方法。
2.通过反射将MVC封装好的model一对一把值赋给从数据取出来封装好的实体。问题:没办法知道那些属性是视图传入的。除非手写这些值,回到下3解决方案。
3.通过数据库取值封装实体再编码一对一给需要更新的属性赋值。问题:相对麻烦,增加字段要重新编码。


想问问你们有没有其它解决方案。感谢
...全文
144 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
啊兵 2013-06-30
  • 打赏
  • 举报
回复
引用 5 楼 tsgx_1989 的回复:

    [Bind(Include="Name,Sex,Phone")] //只允许Name,Sex,Phone由用户输入更新
    public class DataModel
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Sex { get; set; }
        public string  Phone { get; set; }
        public string EMail { get; set; }
    }
直接使用 Bind属性,Include 是白名单的方式
回去试一下。
白云任去留 2013-06-07
  • 打赏
  • 举报
回复
前提:更新数据的方法UpdateData(Model model)[通过主键更新每个字段] 更新时,先查询该条记录,得到一个对象实体,再给需要更新的字段赋值啊,不就解决了。ADO一个实体(40个字段),MVC的model(10个字段属性),将需要更新属性赋值给ADO对象更新!
howtodown 2013-05-29
  • 打赏
  • 举报
回复
新东西,新方法,还得继续学习
Banianer 2013-05-29
  • 打赏
  • 举报
回复
其实楼主你可以用EF的,然后UPDATE的时候只要在实体类中赋值你的10个字段值就可以了。 在更新的时候可以选择只更新变更的数据即可。
zhandjq 2013-05-29
  • 打赏
  • 举报
回复
我也有同样的困惑,希望其它技术大牛能有好的办法,顶一下!!!!
啊兵 2013-05-28
  • 打赏
  • 举报
回复
引用 2 楼 moonwrite 的回复:
重新定义一个实体 只需要的十个字段 这概念叫视图模型 用于Controller和View之间用的~ Controller和数据库之间的 这概念叫可以说领域模型(但还差点点)
这种方式使用过。需要新建一个视图MODEL。这个model字段与视图字段保持一致。使用AutoMapper进行映射。
moonwrite 2013-05-28
  • 打赏
  • 举报
回复
重新定义一个实体 只需要的十个字段 这概念叫视图模型 用于Controller和View之间用的~ Controller和数据库之间的 这概念叫可以说领域模型(但还差点点)
啊兵 2013-05-28
  • 打赏
  • 举报
回复
4.还有一种方法,把不需要更新的字段使用hidden隐藏起来。似乎不够安全,需要写的也比较多。 求解决方案。
Ahoo 2013-05-28
  • 打赏
  • 举报
回复

    [Bind(Include="Name,Sex,Phone")] //只允许Name,Sex,Phone由用户输入更新
    public class DataModel
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Sex { get; set; }
        public string  Phone { get; set; }
        public string EMail { get; set; }
    }
直接使用 Bind属性,Include 是白名单的方式
moonwrite 2013-05-28
  • 打赏
  • 举报
回复
<input name="字段名字,一定要一致" > 然后在后台就可以貌似有个TryModel的填充方法, 但这样就需要自己后台验证了, 所以我还是觉得自己定义 ViewModel { [xxx] [yyy] public string Name{get;set;} } 不用自己再写if...来判断传进来的值是否合法, 刚刚搜到一篇 http://msdn.microsoft.com/zh-cn/magazine/hh781022.aspx

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧