MVP模式-通过IView(Asp.Net、Web表单)被动查看和公开复杂类型

MVP模式-通过IView(Asp.Net、Web表单)被动查看和公开复杂类型,asp.net,mvp,Asp.net,Mvp,我最近使用被动视图方法切换到MVP模式。当视图界面只公开基本的clr类型时,我感到非常舒服,例如映射到文本框的字符串、映射到DropDownList的IDictionary、映射到某些网格的IEnumerable、中继器 然而,最后一种方法只有在从这些网格中我只关心一个节点时才有效。如何在IView中映射网格的多行内容?目前,我想到了两种解决方案,但都不太妙: 为网格内容创建DTO,并在IView中公开IEnumerable, 或 公开IEnumerable或只是IView中的“网格” 第一种解

我最近使用被动视图方法切换到MVP模式。当视图界面只公开基本的clr类型时,我感到非常舒服,例如映射到文本框的字符串、映射到DropDownList的IDictionary、映射到某些网格的IEnumerable、中继器

然而,最后一种方法只有在从这些网格中我只关心一个节点时才有效。如何在IView中映射网格的多行内容?目前,我想到了两种解决方案,但都不太妙:

  • 为网格内容创建DTO,并在IView中公开IEnumerable, 或
  • 公开IEnumerable或只是IView中的“网格”
  • 第一种解决方案似乎打破了被动的视图规则,同时更接近于监控控制器模式,第二种解决方案则完全打破了整个MVP模式。 你会怎么处理这件事


    谢谢,Łukasz

    MVP使webforms开发变得更加容易,除了这种情况。但是,如果您使用TDD来验证IView是否真的需要该数据网格,那么我不知道问题出在哪里

    我想你是想做这样的事情:

    public interface IView
    {
     DataTable DataSource {get; set;}
    }
    
    public class View : IView {
    
    private GridView _datasource;
    public DataSource 
    {
      get { return _datasource; }
      set 
      { 
        _datasource = value; 
        _datasource.DataBind(); 
      }
    }
    
    当与MVP模式一起使用时,我发现这个小模式非常有用