如何通过 MVC C# 中的控制器将模型数据发送到视图
How to send model data to a view through a controller in MVC C#
我已经见过很多不同的 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!
}
}
您可以创建一个 ModelView 对象来显式定义您的视图所需的属性。然后你可以定义一个 Mapper class 负责将服务器端模型映射到客户端模型,从而将视图与服务器模型解耦。
根据你的例子:
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/
我已经见过很多不同的 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!
}
}
您可以创建一个 ModelView 对象来显式定义您的视图所需的属性。然后你可以定义一个 Mapper class 负责将服务器端模型映射到客户端模型,从而将视图与服务器模型解耦。
根据你的例子:
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/