MVP

2009-03-19 11 views
4
私はこのことについて明確ではないよ

....MVP

ビューにGridViewコントロールを持つときなど、データソース、列を設定しているコントローラがありますか?または私はちょうど、DataBindingのものを公開する必要がありますコントローラから発射し、ビュー上のhtml/codebehindすべてのレンダリングと配線を処理することができますか?

は、より正確にするには、次のビューに私は

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

を持つべきか、それが

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

は、たぶん私はそれをすべて間違っを抱えている(MVP pattern - Passive View and exposing complex types through IView (Asp.Net, Web Forms)から)でなければなりません....

ASP.NetのMVPで「Hello world」の例ではない例はどこにありますか?

答えて

4

コントローラは、データバインディングの「結果」を設定する必要があります。ビューは、それを適切に表示する役割を担っています。あなたがする必要があるのであれば

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

したがって、たとえば、あなたのWebフォーム/ユーザーコントロール(ビュー)は、あなたのビューはそれを受信したときに対処する方法を知っておく必要があり、オブジェクトのプロパティとして公開されたデータソースを持つことができますItemDataBoundイベントがある場合、私はまだそれをビューで処理します。イベントにはビジネスロジックがあるかもしれませんが。イベントにビジネスロジックが必要な場合は、ビューに渡す前にMyObjectの結果に配置します。

"MyObject"のプロパティを "AllowDelete"に設定し、ItemDataBoundにこのプロパティの値を設定すると、GridViewの列が有効かどうかが決まります。

3

このトピックの最近のHanselminutesに耳を傾けただけで、Webフォーム内の懸念を分離するのに少し強く思える、http://webformsmvp.com/プロジェクトを見る価値があるかもしれません。