控制表示层中的修改

时间:2011-12-01 09:50:12

标签: c# asp.net webforms mvp

我正在使用GridView并且数据绑定发生在Presenter层中,但是例如必须修改单元格1并将其转换为HyperLink控件然后我必须在Presenter层中调用RowDataBound事件并在该事件内进行修改。这对MVP来说还行吗?

1 个答案:

答案 0 :(得分:1)

我通常会在View级别进行数据绑定和事件处理。通过在Presenter中执行此操作,您将在Presenter和要避免的视图之间创建依赖关系。我不确定如何对在GridView上调用.DataBind()的Presenter方法进行单元测试。

我会做什么(以及我认为是标准的)是在视图类的代码隐藏中添加一个属性,它代表GridView的数据。所以说你的GridView显示员工,属性可能是

public List<Employee> Employees 
{ 
    get { return (List<Employee>)GridView1.DataSource; }
    set // The Presenter calls this
    {
        GridView1.DataSource = value;
        GridView1.DataBind();
    }
}

演示者只需设置此属性,然后就像通常使用webforms一样进行数据绑定和事件处理。

如果您愿意,还可以对Presenter进行单元测试。假设您的视图实现了一个接口,您可以为单元测试使用不同的实现,即setter不会调用.DataBind(),它可能只是一个自动属性。您可以创建一个模拟视图,将其传递给Presenter,然后测试您的属性是否为null,或者沿着这些行进行测试。