1

WebFormsMvp ページでビューからプレゼンターにビジネス オブジェクトの多数のプロパティ値を取得する最良の方法は何ですか?

DataSources に関するこの問題に留意してください。

これが私が提案するものです:

シナリオは、Quote というビジネス オブジェクトをデータベースからロードし、編集してから保存したいというものです。Quote クラスには多くのプロパティがあります。このフォームは、これらのプロパティのうち約 20 に関係しています。データベースとの間で Quote オブジェクトをロード/保存する既存のメソッドがあります。これをすべて一緒に配線する必要があります。

したがって、プレゼンターの View_Load ハンドラーで、次のようなことを行うつもりです。

public void View_Load(object sender, EventArgs e)
{
    View.Model.Quote = quoteService.Read(quoteId);
}

そして、次のようにすべてのコントロールをバインドします。

<asp:TextBox ID="TotalPriceTextBox" runat="server"
    Text="<%# Model.Quote.TotalPrice %>" />

大丈夫です。データが画面に表示されています。

次に、ユーザーは一連の変更を行い、[送信] ボタンをクリックします。ここがよくわからないところです。

フォームが編集できる 20 個のプロパティを公開する QuoteEventArgs というクラスを作成します。ビューが [送信] ボタンのイベントを発生させると、コード ビハインドでこれらのプロパティをコントロールの値に設定します。次に、プレゼンターが応答するイベントを発生させます。プレゼンターは Quote オブジェクトをデータベースから再読み込みし、すべてのプロパティを設定してデータベースに保存します。

これはこれを行う正しい方法ですか?そうでない場合、何ですか?

4

2 に答える 2

1

「より良い方法」(/代替)は、双方向バインディングを利用することです。したがって、処理のためにプレゼンターに返されるのは、Quoteオブジェクトになります。

これは、 UpdateMethodおよびBind()メソッドを指定するmvp:PageDataSourceと組み合わせてasp:FormViewを使用することで実現できます。

WebFormsMVPサンプルプロジェクトは、View code-behindファイルで必要なメソッドを含め、「EditWidgetControl」を介してこれを示しています。

オプションとして、ビューは、 FormViewのDefaultMode = "Edit"を使用して、asp:FormViewEditItemTemplateのみを実装できます。

サンプル構造:

<asp:FormView DataSourceID="theSource" DefaultMode="Edit">
    <EditItemTemplate>
        <fieldset>
            <asp:TextBox id="totp" value='<%# Bind("TotalPrice") %>' runat="server" />
        </fieldset>
    </EditItemTemplate>
</asp:FormView>

<mvp:PageDataSource ID="theSource" runat="server"
    DataObjectTypeName="Your.NameSpace.Quote"
    UpdateMethod="UpdateQuote">
</mvp:PageDataSource>

コードビハインド:

public void UpdateQuote(Quote q, Quote ori)
{
    OnUpdatingQuote(q, ori);
}

public event EventHandler<UpdateQuoteEventArgs> UpdatingQuote;

private void OnUpdatingQuote(Quote q, Quote ori)
{
   if (UpdatingUserGroup != null)
   {
       UpdatingUserGroup(this, new UpdateQuoteEventArgs(q, ori));
   }
}
于 2010-06-22T07:08:44.787 に答える
0

FormView 内で GridView を使用する方法。エンティティにグリッドを設定するリストがあるためです。

于 2013-07-08T12:35:08.193 に答える