我想让ExtJS组合框返回值而不是显示值。ExtJS Combobox发布hiddenName值
这是我的问题。我使用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%'
},
的另一件事是,当我设置“名称”为“DataTypeCde”的代码值得到展示,但一旦对ComboBox ajax的数据得到加载,显示值然后被显示值替换。
因此,我可以获取'hiddenName'来加载DataTypeCde值并将此值回传,或者获取组合框数据以预加载表单呈现。
有人可以指出是否有方法或我做错了什么,以防止代码值被回发。
更新: * UPDATE4:(后加入响应样本) *
让我解释一下我想达到更好的。
(1)在按照上面的代码将被显示... 如果数据类型=购物和DataTypeCde = SP 渲染会显示购物,这是我多么希望这是后组合框。 但是,一旦我将这个结果提交给控制器,“购物”将被返回而不是“SP”...这不是我想要的。 POST响应的
实施例...
id=1&DataType=Shopping
(2)同设定为 “DataTypeCde”,这将是以下结果的名称字段... 如果datatype =购物和DataTypeCde = SP 渲染后的组合框将显示SP,这不是我想要的,因为我想显示文本而不是代码。 但是,一旦我将结果提交回控制器,代码“SP”就会返回,这就是我的意图。 POST响应的
实施例...
id=1&DataTypeCde=SP
(3)通过使用设置名称字段的第二方法为“DataTypeCde”我们将得到直到代码显示的结果组合框数据被加载。所以要解决这个问题,我已经将“autoLoad”特性设置为true,所以组合框数据将自动加载到渲染中。此时ExtJS会将显示的“SP”代码替换为“Shopping”的显示值。 但是这个解决方案的一个问题是需要在开始时加载所有的组合框会显着降低页面加载速度。 POST响应
例...
id=1&DataTypeCde=SP
(Q)我的问题是...有没有一种方法来设置显示值显示为组合框,但不加载组合框数据,但将代码值取回显示值而不是显示值。
UPDATE2:
很抱歉的混乱,我忘了提我使用ASP.NET MVC4与ExtJS的。在我提到将回帖后回复给控制员的情况下。我的意思是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"}}
下面是阿贾克斯的数据组合框代码...
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"}]
感谢
感谢@sra,为突出对我来说,关键术语,非常有帮助。我也尝试了通过添加submitValue:false并删除hiddenName的建议。但是这只会阻止这个领域一起提交。从你的建议,我试图找到一个提交这个[post](http://stackoverflow.com/questions/5423136/extjs-how-to-submit-both-combobox-value-文字),但没有运气。 –
@ STi88我编辑了我的帖子 – sra
感谢@sra为您提供持续的支持。你可能是对的,我这样做的方式是错误的,这可能是因为我想要做的是不常见的......我已经添加了更多的实现细节,希望有人能指点我正确的道路。 –