Как отправить данные модели в представление через контроллер в MVC C#

Я уже видел много разных архитектур MVC. Все они разные. Я хотел бы знать стандартный способ отправки данных модели в представление с помощью контроллера. Целесообразно ли отправлять объект модели в вид и устанавливать поля вида с помощью одного установщика? или установить поля просмотра по одному, используя несколько сеттеров с одним параметром или другим способом?

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 ответ

Решение

Вы можете создать объект ModelView, который явно определяет свойства, необходимые для вашего представления. Затем вы можете определить класс Mapper, отвечающий за отображение модели на стороне сервера в модель на стороне клиента, таким образом отделяя представление от модели сервера.

Из вашего примера:

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/

Другие вопросы по тегам