我试图让 ExtJS 组合框返回值而不是显示值。
这是我的问题。我正在使用 ajax 来获取组合框字段的数据,同时使用 getForm().load 来加载组合框的选定值。在模型中,我返回了一个显示值和代码值。显示值分配给“名称”,代码值分配给“隐藏名称”。当我提交数据时,提交的是显示值而不是“隐藏名称”字段中的代码值。
更改组合框的选择后,正在提交代码值。
这是代码:
{
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%'
},
另一件事是,当我将“名称”设置为“DataTypeCde”时,代码值会显示,但是一旦加载了组合框的 ajax 数据,显示值就会被显示值替换。
因此,我可以获取“hiddenName”来加载 DataTypeCde 值并将该值回发,或者获取组合框数据以在表单渲染上预加载。
有人可以指出是否有办法或我做错了什么来防止代码值被回发。
更新: *更新 4:(添加 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) 使用第二种方法将name字段设置为“DataTypeCde”,我们将得到代码显示的结果,直到组合框数据被加载。因此,为了解决这个问题,我将“autoLoad”功能设置为 true,因此组合框数据将在渲染时自动加载。此时ExtJS会将显示的“SP”代码替换为“Shopping”的显示值。但是这个解决方案的一个问题是,要求所有的组合框在开始时加载会显着减慢页面加载速度。
POST 响应示例...
id=1&DataTypeCde=SP
(Q) 我的问题是......有没有办法在不加载组合框数据的情况下为组合框设置显示值,但是让代码值而不是显示值被回发。
更新2:
很抱歉造成混淆,我忘了提到我正在使用带有 ExtJs 的 ASP.NET MVC4。在我提到将发布响应返回给控制器的情况下。我的意思是 MVC 控制器。我认为后端与这个问题无关。
更新3:
为了更全面地了解我的实现,这里是我用来加载表单的代码和数据示例。
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"}]
谢谢