代码之家  ›  专栏  ›  技术社区  ›  Mahdi GB

如何在MVC中通过控制器将模型数据发送到视图#

  •  0
  • Mahdi GB  · 技术社区  · 6 年前

    我已经看到了许多不同的MVC架构。它们都是不同的。 我想知道使用控制器将模型数据发送到视图的标准方法。 是否适合使用一个setter将模型对象发送到视图并设置视图字段?或者使用带有一个参数的多个setter或其他方式逐个设置视图字段?

    public class View{
        public void SetField1(int value){
          //...
        }
        public void SetField2(string text){
          //...
        }
        public void SetField3(Time time){
          //...
        }
        //or
        public void SetContent(Model model){
           //...
        }
    }
    
    public class Model{
       public int _value;
       public string _text;
       public Time _time;
    
       public Model(int value,string text,Time time){
         //...
       }
    }
    
    public class Controller{
       Model _model;
       View _view;
    
       public Controller(){
          _model=new Model();
          _view=new View();
       }
       public void SetModel(Model model){
          _model=model;
          SetContentView();
       }
       public void SetView(View view){
          _view=view;
       }
       public void SetContentView(){
          _view.SetField1(_model._value);
          _view.SetField2(_model._text);
          _view.SetField3(_model._time);
          //or
          _view.SetContent(_model); // the view can not be decoupled with model!
       }
    } 
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   zaq    6 年前

    您可以创建一个ModelView对象,明确定义视图所需的属性。然后可以定义一个映射器类,负责将服务器端模型映射到客户端模型,从而将视图与服务器模型分离。

    根据您的示例:

    public class Controller{
       Model _model;
       View _view;
       Mapper _mapper;
    
       public Controller(){
          _model=new Model();
          _view=new View();
          _mapper = new ViewModelMapper();
    
       }
    
       public void SetContentView(){
          _view.SetContent(_mapper.map(_model));
       }
    } 
    

    我在这方面没有太多经验,但确实存在一些框架,旨在减少这方面的繁琐: http://automapper.org/