页面乱序——ViewModel

 问题:


       在拼接考试的试卷内容的时候,后台传到Controler中的变量是一个list<T_question>,也就是返回了一个实体的list变量,出现了乱序。

       现在用单选题来说明:

       比如在数据库中的第一列是试卷的类型(选择题等),

       第二列是难度等级,

       第三列是该题的分数(单精度类型),

       第四列是试卷类型的题干(选择题第一小题的题干内容:....),

       第五列是选项(A:..B:..C:..),

       拼接出的试卷的内容就需要里面的试题内容和选项俩个。

       但是显示在页面的内容出现了本该出现QuestionContent,却出现了Answer1的内容,本该是Answer1的内容,却出现的是Answer2的内容。为什么会出现这样的乱序?

      


试想:

       将实体转换为list的过程中,需要经历一个将datetable转换为list,很可能是封装的这个DateTableToList有问题,无法区分int类型和单精度类型。在vs中添加监控,发现最开始的QuestionID(int类型)里面有数据,而Fraction(分数,单精度)没有为null,很可能传到页面的数据的时候,自动的将数据进行了筛选,为空的Fraction自动由有数据的QuestionContent代替。所以,我觉得封装的这个DateTableToList有问题。


解决:


      但是将T_question表写成viewmodel的形式,就这样解决了。


分析:


       实体是和数据库进行交互的显示。


       viewmodel是一种用于封装界面逻辑和操作逻辑的对象,他就是一个视图,我们很多时候都要在页面显示很多很多的实体的集合,就用它来显示,即这个大视图viewmodel中包含哪些数据,以什么的方式呈现,视图中包含哪些控件,这些控件会激发什么的操作等,我们可以把viewmodel看做是dataset和各种控件的容器。viewmodel一般不用于定义各种控件最终显示的布局,控件的布局一般情况是通过我们的CSS、JS、JSP来显示。


      viewmodel为什么可以让页面序列化呢?


      我们在写viewmodel中打了很多的标签, [DataContract]  [Serializable] 这些标签有什么的作用?


  [Serializable]:序列化,可以将对象实例的状态存储媒体的过程,在此过程中,先将对象的公共字段和私有字段及其类的名称转换为字节流,然后再讲字节流写进去数据流。在随后对对象进行反序列化时,将创建出于原对象完全相同的副本,对象是暂时保存在内存中的,将对象保存下来,这个过程就是序列化。

 

  [DataContract] :服务契约,它定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型,一旦声明了这个类型,该类型可以在被序列化在服务端和客户端传送。因为有了它,我们的前台和后台的数据才有了保障。


   学习是一个不断深入的过程。。。。。


   







                               


         

    


                             

你可能感兴趣的:(页面乱序——ViewModel)