【问题标题】:MVP on Asp.Net WebFormsAsp.Net WebForms 上的 MVP
【发布时间】:2009-03-19 23:27:33
【问题描述】:

这个我不是很清楚....

当在 View 上有一个 gridview 时,控制器是否必须设置数据源、列等?或者我只需要公开 DataBinding 的东西,从控制器中触发它,然后让视图上的 html/codebehind 处理所有的渲染和接线?

更准确地说:在视图上我应该有

private GridView _gv
public _IList<Poco> Source { 
    get {_gv.DataSource;}
    set {_gv.DataSource = value;
         _gv.DataBind();}
}

或者应该是(来自MVP pattern - Passive View and exposing complex types through IView (Asp.Net, Web Forms)

private GridView _datasource;
public DataSource 
{
  get { return _datasource; }
  set 
  { 
    _datasource = value; 
    _datasource.DataBind(); 
  }
}

也许我错了......

在哪里可以找到不是 ASP.Net MVP 的“Hello world”示例的示例???

【问题讨论】:

    标签: asp.net design-patterns gridview mvp


    【解决方案1】:

    您的控制器应该负责设置数据绑定的“结果”。视图负责正确显示它。

    因此,例如,您的 webform/usercontrol (View) 可以将数据源公开为对象属性,您的 View 在收到它时应该知道如何处理:

    public MyObject DataSource 
    {
      set 
      { 
        _datasource = value; 
        _datasource.DataBind(); 
      } 
    }
    

    所以如果你需要一个 ItemDataBound 事件,我仍然会在视图中处理它。即使事件中可能存在业务逻辑。如果你需要在事件中有业务逻辑,我会把它放在 MyObject 结果中,然后再传递给视图。

    因此,一个示例是让“MyObject”的属性为“AllowDelete”,并且在您的 ItemDataBound 中,此属性的值决定了 GridView 中的列是否启用。

    【讨论】:

      【解决方案2】:

      刚刚收听了最近关于这个主题的 Hanselminutes,可能值得一看 http://webformsmvp.com/ 项目,它似乎为在 WebForms 中分离关注点带来了一些僵化。

      【讨论】:

        猜你喜欢
        • 2011-03-14
        • 2017-07-11
        • 2011-01-27
        • 1970-01-01
        • 2011-02-14
        • 1970-01-01
        • 1970-01-01
        • 2016-08-17
        • 1970-01-01
        相关资源
        最近更新 更多