首页 新闻 会员 周边 捐助

[MVC]viewmodel怎么和model连接起来?

0
悬赏园豆:100 [已解决问题] 解决于 2015-12-21 15:46

MVC的大神给点帮助

 

ASP.NET MVC 中的ViewModel(视图模型)怎么和Model(实体)连接起来?查的不少资料,视图模型基本一笔带过,或者就介绍一下。小弟想学习ViewModel的使用,求大神们给点指点或者资料

恋不恋的主页 恋不恋 | 初学一级 | 园豆:112
提问于:2015-12-20 00:41
< >
分享
最佳答案
0

ViewModel称为页面实体

Model为数据库实体

其实没有什么连接起来的,主要是做一个实体间数据的相互转换,以控制器A,action为Create为例

public ActionResult Create(ViewModelA model){ //这里接收的是页面模型

  //第一步将页面模型转为数据库模型

 var entity = model.ToEntity();

  //再进行插入就行

  _aServices.Insert(entity);  

}

ToEntity哪里来的呢?这里应用到了AutoMapper进行实体映射转换

第一步:在系统初始化的时候(你可以放在application_start或者别的地方)就做上关系映射

Mapper.CreateMap<A, ViewModelA>();
Mapper.CreateMap<ViewModelA, A>();

然后做一个静态的扩展方法方法

public static TDestination MapTo<TSource, TDestination>(this TSource source)
{
return Mapper.Map<TSource, TDestination>(source);
}

public static TDestination MapTo<TSource, TDestination>(this TSource source, TDestination destination)
{
return Mapper.Map(source, destination);
}

//上面两个通用

主要是下面的

public static A ToEntity(this ViewModelA model)
{
return model.MapTo<BtnModel, A>();
}
public static A ToEntity(this ViewModelA model, A entity)
{
return model.MapTo<ViewModelA , A>(entity);
}

public static ViewModelA ToModel(this A model)
{
return model.MapTo<A, ViewModelA >();
}

基本上以上这么多就可以做两个实体间的相互转换了,其实就是会用AotoMapper就行!

收获园豆:100
colyn | 初学一级 |园豆:79 | 2015-12-21 09:07

好的,我去查查怎么用的

恋不恋 | 园豆:112 (初学一级) | 2015-12-21 15:43
其他回答(1)
1

欸。。我问了半天DTO也没人回我

 

ViewModel就是根据需求写Model,比如说你要写一个注册的Model,

单独建一个RegisterViewModel,这个里面只有两个属性

1.用户名 2.密码 (3.确认 密码->如果有的话)

这里和实体类的区别就是,第三个确认密码只是用来作为MVC验证用的(加特性标签),不会存储起来

 

如果你写一个查询学生的表格页面可以这样写ViewModel:

1.Id

2.Name

3.班级Id

4.班级名(PO实体类的学生实体里面的是班级导航属性,这里只需要展示班级名所以只写班级名字,)

 

大概就是这个意思,ViewModel的数据不会持久化存储,应该是从UI层传入BLL层以后再转换成DO/PO啥的 反正就是转换成实体然后再存入数据库。反之亦然

 

可以使用DTO代替VO在某些情况下,DTO可以使用AutoMapper进行实体映射转换

不过也不太方便,反正新加一层多了很多工作量。。

星辰Mapley | 园豆:114 (初学一级) | 2015-12-20 13:35

这样数据安全性高了。

dto,AutoMapper

好的,我去查查怎么用的

支持(0) 反对(0) 恋不恋 | 园豆:112 (初学一级) | 2015-12-21 15:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册