2

ASP.Net MVC 3を使用しており、複数のデータベーステーブルに関連するアイテムを含む単一のドロップダウンリストを作成する必要があります。

通常、単一のデータ型に対してドロップダウンリストを作成する必要がある場合は、各ドロップダウンの「値」としてIDを簡単に使用でき、次のoptionようになります。

@Html.DropDownListFor(x => x.SelectedID, Model.GetMyList())

しかし、今は複数のデータ型を混同したいと思います。したがって、この例では、「所有者」のようなものを表す単一のリストを作成したいとします。これは、「ユーザー」または「顧客」のいずれかになります。この例では、UserとCustomerの両方が別個のデータベーステーブルであるため、ID値だけではそれらを正しく識別するのに十分ではありません。

では、そのような機能を実現するための最良の方法は何ですか?

私の最初の考えは、「カスタム」値の文字列を作成することです。これをサーバー側で解析して、IDとデータ型を計算することができます...

"USER|1"
"CUSTOMER|1"

私はこの仕事をすることができることを知っていますが、私はこれを必要以上に複雑にしていますか?これを行うための組み込みまたはアドバイスされた方法はありますか?

4

2 に答える 2

0

あなたのモデルでは、次のようなことはできません:-

public class Model
{
    public string Owner { get; set; }
    public List<MyList> ListCollection { get; set; }

    public class MyList
    {
        public int Id { get; set; }
        public string Value { get; set; }
    }
}

したがって、どのリストアイテムが選択されているかを確認するときは、[所有者]フィールドにもアクセスでき、どのテーブルに属しているかがわかります。

于 2013-01-24T12:46:41.200 に答える
0

誰もこれ以上良いものを思い付いていないので、私の元のアイデア(それがそうであったのと同じくらい望ましくない)がその仕事をしたことを確認できます。

選択オプションの値を設定するときは、サーバー側で簡単に解析できるカスタム文字列を作成する必要があります。これは、エンティティのTYPEとIDを分離するパイプを使用して実現されました。次に例を示します。

"USER|1"
"USER|2"
"CUSTOMER|1"
"CUSTOMER|2"

選択した値がサーバーに渡されると、次のように解析できます。

string option = "USER|1";
string[] values = option.Split('|');
string entityType = values[0];
int entityId = Int.Parse(values[1]);

これは、次のように使用できます。

if(entityType == "USER")
   UpdateUser(entityId);
else//CUSTOMER
   UpdateCustomer(entityId);
于 2013-09-18T12:59:29.687 に答える