0

私のプロジェクトでは、ユーザーがさまざまな機能を可能にするさまざまなサブスクリプション料金にサインアップできるようにします。一部のユーザーは無料サブスクリプションを利用しているため、機能が制限されていますが、有料ユーザーは自分のアカウントで追加のアクションを実行できます。この機能はまだ実装されていませんが、料金の詳細についてはビューを作成しています。

「SubscriptionTariffs」テーブルと「SubscriptionServices」テーブルがあり、後者は各サービスの前者のIDフィールドへの外部キーを保持しています。私の見解では、料金がそれらをサポートしているかどうかに関係なく、可能なすべてのサービスを表示したいと思います。それらがその料金表で利用できる場合は、チェックボックスをオンにします。その逆も同様です。

したがって、無料の料金については、最初の7つのオプションがチェックマークで表示され、他のオプションはマークされていないがまだ表示されている次のようなものを表示したいと思います。

            <tr><td style="padding:5px;"><input type="checkbox" DISABLED checked />&nbsp; @Language.ViewTransactions</td></tr>
            <tr><td style="padding:5px;"><input type="checkbox" DISABLED checked />&nbsp; @Language.CreateTransactions</td></tr>
            <tr><td style="padding:5px;"><input type="checkbox" DISABLED checked />&nbsp; @Language.Announcements</td></tr>
            <tr><td style="padding:5px;"><input type="checkbox" DISABLED checked />&nbsp; @Language.Alerts</td></tr>
            <tr><td style="padding:5px;"><input type="checkbox" DISABLED checked />&nbsp; @Language.Foldering</td></tr>
            <tr><td style="padding:5px;"><input type="checkbox" DISABLED checked />&nbsp; @Language.TransactionDownload</td></tr>
            <tr><td style="padding:5px;"><input type="checkbox" DISABLED checked />&nbsp; @Language.TransactionUpload</td></tr>
            <tr><td style="padding:5px;"><input type="checkbox" DISABLED checked />&nbsp; @Language.EZApproval</td></tr>
            <tr><td style="padding:5px;"><input type="checkbox" DISABLED />&nbsp; @Language.SupplyChainFinance</td></tr>
            <tr><td style="padding:5px;"><input type="checkbox" DISABLED />&nbsp; @Language.HierarchicalOrgs</td></tr>
            <tr><td style="padding:5px;"><input type="checkbox" DISABLED />&nbsp; @Language.WhiteLabeling</td></tr>
            <tr><td style="padding:5px;"><input type="checkbox" DISABLED />&nbsp; @Language.MultiFormatDownload</td></tr>
            <tr><td style="padding:5px;"><input type="checkbox" DISABLED />&nbsp; @Language.MultiFormatUpload</td></tr>
            <tr><td style="padding:5px;"><input type="checkbox" DISABLED />&nbsp; @Language.VANInteroperability</td></tr>

関連するすべてのサービスを料金表に表示するために、次のように記述しました。

        @{
            foreach (var SubscriptionService in this.Model.SubscriptionServices)
            {
                <tr><td style="padding:5px;"><input type="checkbox" DISABLED checked />&nbsp; @(SubscriptionService.ServiceName != null ? SubscriptionService.ServiceName : "")</td></tr>
            }
        }

これは正常に機能しますが、すべてのサービスを表示し、必要に応じてそれらをオンまたはオフにする必要があります。

誰かが私を正しい方向に向けてくれたら非常にありがたいです。if-elseステートメントかチェックするものを書くことができるはずだと思いますが、完全にはわかりません。

4

1 に答える 1

1

おそらくこの例this.Model.SubscriptionServicesでは、選択した料金で保持されているサービスであるため、チェックされていないチェックボックスを追加するだけで済みます。

これを行う最も簡単な場所はモデル内です。すべてのサブスクリプションサービスに別のコレクションを追加する必要があります。その後、ビューで次のように記述できます。

@{
    foreach (var SubscriptionService in this.Model.SubscriptionServices)
    {
        <tr><td style="padding:5px;"><input type="checkbox" DISABLED checked />&nbsp; @(SubscriptionService.ServiceName != null ? SubscriptionService.ServiceName : "")</td></tr>
    }
    foreach (var SubscriptionService in this.Model.AllSubscriptionServices.Where( s => !this.Model.SubscriptionServices.Contains( s ) ) )
    {
        <tr><td style="padding:5px;"><input type="checkbox" DISABLED />&nbsp; @(SubscriptionService.ServiceName != null ? SubscriptionService.ServiceName : "")</td></tr>
    }
}

または、LINQ to SQLまたはその他のORMを使用してデータモデルにアクセスしている場合(およびこれらのモデルを直接渡す場合)、モデルにこのwhere句を適用すると、ビューに送信されるデータが少なくなるため、より効率的になります。ビューに)次に、生成された部分クラスにブール値を追加できます。public bool IsInSelectedTarriff { get; set; }次に、Model.SubscriptionServicesコレクションに入力するためのより複雑なクエリを記述します。

this.SubscriptionServices = (
    from sub in DataContext.SubscriptionServices
    select new SubscriptionServices()
    {
        ID = ID,
        ServiceName = ServiceName,
        // copy all data directly into it's field
        // ...
        IsInSelectedTarriff = sub.SubscriptionTarriffID == this.SubscriptionTarriff
    } );

ただし、このモデルを別のビューで使用する場合は、その画面に固有のSubscriptionTarriff用の新しいViewModelを作成することをお勧めします。これは、IsInSelectedTarriffオプションが追加された元のプロパティの直接コピーです。タプルクラスは、コレクションに追加データを追加する場合にも役立ちます。

于 2013-01-31T12:14:36.783 に答える