durandal/breezeを使用してasp.net mvcソリューションを開発します。Breezeでenum(サーバー側)が提供するオプションでドロップダウン
私は、リストがEntity Framework Code Firstによって提供されるEnumから読み込まれるドロップダウンを持っています。ここで
public enum EnumCategory
{
Cat1,
Cat2,
Cat3,
Cat4
}
この列挙型を使用した表である:ここではモデルのサーバ側は、
public class Transport
{
[Key]
public int Id { get; set; }
public EnumCategory Category { get; set; }
...
}
私の質問:埋めることができるように列挙型のサーバ側のこれらの値を取得する方法私のドロップダウンクライアント側?
var categories = [
{ id: '' , description: '' },
{ id: 'Cat1', description: 'Category 1' },
{ id: 'Cat2', description: 'Category 2' },
{ id: 'Cat3', description: 'Category 3' },
{ id: 'Cat4', description: 'Category 4' }];
マイビュー表示このように、このドロップダウンは:
<select data-bind="options: $root.categories,
optionsText: 'description',
optionsValue: 'id',
value: category,
validationOptions: { errorElementClass: 'input-validation-error' },
valueUpdate: 'afterkeydown'">
</select>
値クライアントのリストを再作成する必要が私には冗長なようだ私はこのような新しい配列手動でクライアント側を作成する必要がありますか私たちは既にこの値のリストをサーバー側に持っているからです。
ありがとうございました。ここで
あなたが私に与える例は、特に値のリストがデータベースから来た場合です。私の質問は、列挙型(サーバー側)から値のリストを取得することです。これは同じアプローチではありません。私は私のdbに異なる値を格納したくない。とにかくありがとう。 – Bronzato
dbにenumの説明を保持する必要はありません。各enum値にDescriptionAttributeを追加し、サーバー上にIDと説明のペアの配列を作成します。 IDと説明を取得するには、Enum.GetValues()とAttribute.GetCustomAttributes()を使用します。 – pawel
こんにちはブロンザート、私は、サーバー上であなたのEnumを一度定義し、APIコントローラを使用してクライアント上でアクセスすることをお勧めします。 これは、クライアント上でタイムゾーンのリストを設定するために効果的に行っていることです。タイムゾーンのリストは.NET TimeZoneInfoクラスによって提供されます。これは、enumシナリオのようなもので、コードではなくDBから生成されます。 –