ExtJSコンボボックスに表示値ではなく戻り値を取得しようとしています。
これが私の問題です。私はajaxを使用してコンボボックスフィールドのデータを取得し、同時にgetForm()。loadを使用してコンボボックスの選択された値をロードしています。モデルでは、表示値とコード値を返しました。表示値は「name」に割り当てられ、コード値は「hiddenName」に割り当てられます。データを送信すると、「hiddenName」フィールドのコード値ではなく、表示値が送信されます。
コンボボックスの選択を変更した後、コード値が送信されます。
コードは次のとおりです。
{
xtype: 'combobox',
fieldLabel: 'Type',
name: 'DataType',
hiddenName: 'DataTypeCde',
store: Ext.create('Ext.data.JsonStore', {
proxy: {
type: 'ajax',
actionMethods: { create: 'POST', read: 'POST', update: 'POST', destroy: 'POST' },
url: '@Url.Content("~/{URL}/DataType")',
reader: {
type: 'json'
}
},
fields: ['Id', 'Name']
}),
valueField: 'Id',
displayField: 'Name',
typeAhead: true,
mode: 'remote',
emptyText: 'Select a data type...',
anchor: '96%'
},
もう1つは、「name」を「DataTypeCde」に設定すると、コード値が表示されますが、コンボボックスのajaxデータが読み込まれると、表示値が表示値に置き換えられます。
したがって、「hiddenName」を取得してDataTypeCde値をロードし、この値をポストバックするか、コンボボックスデータを取得してフォームレンダリングでプリロードすることができます。
コード値がポストバックされないようにする方法や私が間違っていることを誰かが指摘できますか?
更新: * Update4 :( POST応答サンプルを追加) *
私が達成しようとしていることについてもっとよく説明しましょう。
(1)上記のコードでは、次のように表示されます... DataType=ShoppingおよびDataTypeCde=SPの場合、レンダリング後のコンボボックスにはShoppingが表示されます。これは、私が望む方法です。しかし、この結果をコントローラーに送信すると、「SP」ではなく「ショッピング」が返されます...これは私が望むものではありません。
POST応答の例...
id=1&DataType=Shopping
(2)名前フィールドを「DataTypeCde」に設定すると、次の結果になります... DataType=ShoppingおよびDataTypeCde=SPの場合、レンダリング後のコンボボックスにはSPが表示されます。これは、テキストを表示したいので、私が望むものではありません。コードではありません。しかし、結果をコントローラーに送信すると、コード「SP」が返されます。これは私が意図した方法です。
POST応答の例...
id=1&DataTypeCde=SP
(3)名前フィールドを「DataTypeCde」に設定する2番目の方法を使用すると、コンボボックスデータがロードされるまでコード表示の結果が得られます。したがって、この問題を解決するために、「autoLoad」機能をtrueに設定しました。これにより、コンボボックスデータがレンダリング時に自動的にロードされます。この時点で、ExtJSは、表示されている「SP」コードを「ショッピング」の表示値に置き換えます。ただし、このソリューションの問題の1つは、最初にすべてのコンボボックスをロードする必要があると、ページのロードが大幅に遅くなることです。
POST応答の例...
id=1&DataTypeCde=SP
(Q)私の質問は...コンボボックスデータをロードせずにコンボボックスに表示する表示値を設定する方法はありますが、表示値の代わりにコード値がポストバックされます。
Update2:
混乱して申し訳ありませんが、ExtJでASP.NETMVC4を使用していることを忘れてしまいました。ポストレスポンスをコントローラーに返すことに言及した場合。私はMVCコントローラーを意味します。バックエンドがこの質問に関連するとは思いませんでした。
Update3:
私の実装の全体像を示すために、フォームをロードするために使用するコードとデータのサンプルを次に示します。
example2.getForm().load({
url: '@Url.Content("~/{URL}/Data/")',
params: {
id: window.record.data['id']
},
method: 'POST'
});
上記はこれに似たjsonオブジェクトのコレクションをロードします...
{"success":true,"data":{"id":"1","DataType":"Shopping","DataTypeCde":"SP"}}
コンボボックスのデータをajaxするコードは次のとおりです...
store: Ext.create('Ext.data.JsonStore', {
proxy: {
type: 'ajax',
actionMethods: { create: 'POST', read: 'POST', update: 'POST', destroy: 'POST' },
url: '@Url.Content("~/{URL}/DataType")',
reader: {
type: 'json'
}
},
fields: ['Id', 'Name']
}),
結果は次のようなjsonオブジェクトになります...
[{"Id":"SP","Name":"Shopping"}]
ありがとう