当前位置:编程学习 > C#/ASP.NET >>

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

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

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


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

           现在能想到的解决方案:

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


想问问你们有没有其它解决方案。感谢 MVC --------------------编程问答-------------------- 4.还有一种方法,把不需要更新的字段使用hidden隐藏起来。似乎不够安全,需要写的也比较多。


求解决方案。 --------------------编程问答-------------------- 重新定义一个实体 只需要的十个字段   这概念叫视图模型
用于Controller和View之间用的~

Controller和数据库之间的 这概念叫可以说领域模型(但还差点点)

--------------------编程问答--------------------
引用 2 楼 moonwrite 的回复:
重新定义一个实体 只需要的十个字段   这概念叫视图模型
用于Controller和View之间用的~

Controller和数据库之间的 这概念叫可以说领域模型(但还差点点)

这种方式使用过。需要新建一个视图MODEL。这个model字段与视图字段保持一致。使用AutoMapper进行映射。 --------------------编程问答-------------------- <input name="字段名字,一定要一致" >

然后在后台就可以貌似有个TryModel的填充方法,
但这样就需要自己后台验证了,
所以我还是觉得自己定义
ViewModel
{
     [xxx]
     [yyy]
     public string Name{get;set;}
}
不用自己再写if...来判断传进来的值是否合法,

刚刚搜到一篇
http://msdn.microsoft.com/zh-cn/magazine/hh781022.aspx --------------------编程问答--------------------

    [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 是白名单的方式 --------------------编程问答-------------------- 新东西,新方法,还得继续学习 --------------------编程问答-------------------- 我也有同样的困惑,希望其它技术大牛能有好的办法,顶一下!!!! --------------------编程问答-------------------- 其实楼主你可以用EF的,然后UPDATE的时候只要在实体类中赋值你的10个字段值就可以了。
在更新的时候可以选择只更新变更的数据即可。 --------------------编程问答-------------------- 前提:更新数据的方法UpdateData(Model model)[通过主键更新每个字段]

更新时,先查询该条记录,得到一个对象实体,再给需要更新的字段赋值啊,不就解决了。ADO一个实体(40个字段),MVC的model(10个字段属性),将需要更新属性赋值给ADO对象更新! --------------------编程问答--------------------
引用 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 是白名单的方式


回去试一下。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,