如何从网格到c#控制器获取值

时间:2013-02-01 01:51:38

标签: c# asp.net-mvc extjs extjs4 extjs4.1

我正在尝试从c#controller中的网格中获取值。这是我的商店和网格

Ext.create('Ext.data.Store', {
    storeId:'store',
    fields:['name', 'email', 'phone'],
    proxy: {
        type: 'memory',
        reader: {
            type: 'json',
            root: 'items'
        }
     }
});

Ext.create('Ext.grid.Panel', {
    store: Ext.data.StoreManager.lookup('store'),
    columns: [
        { text: 'Name',  dataIndex: 'name' },
        { text: 'Email', dataIndex: 'email', flex: 1 },
        { text: 'Phone', dataIndex: 'phone' }
    ],
    height: 200,
    width: 400,
    renderTo: Ext.getBody()
});

这就是我尝试将网格值传递给控制器​​的方法

var records = [];
this.store.data.each(function(rec) {
     records.push(rec.data);
});
Ext.Ajax.request({
     url: 'mycontroller/read_grid',
     params: {
          par1: Ext.encode(records)
     }
})

我的问题是我如何从列电话获取所有值来更新我的sql数据库。我是否使用某种数组或是否有一种方法可以将“phone”列的所有值存储在数据库中

1 个答案:

答案 0 :(得分:2)

你这样做是错误的。首先,您应该始终为模型提供一个[idProperty][1]属性,并且您应该始终使用模型!现在,如果你没有定义模型,商店将使用隐式模型,如果你没有定义idProperty,默认情况下它将是'id'。

现在让我们假设您拥有所有这些: 如果您随后添加或编辑绑定到商店(添加或加载到商店)的该类型的模型实例(记录),您可以提交所有已更改(具有脏字段)或新增(通过幻像)的实例(记录)在商店调用sync()。代理将需要一个适当的编写器。在这种情况下,您可以将写入配置为[allowSingle][2]设置为false,以强制编写器始终将记录的数组(列表)发送回服务器,否则您可能会在控制器上反序列化错误。

如果您只是发送电话号码,您的情况听起来有点不常见,您怎么知道哪个电话号码属于谁?无论如何,如果您按照上述方式执行此操作,您可以采用正确的方式,并且您仍然可以决定在服务器上使用哪些字段。

  

注意:如果在模型上定义代理,则无需定义代理   再次在商店里。

<强>更新

要获取一种字段类型并发送它,您可以执行(未经测试)

var emails = store.collect('email');
Ext.Ajax.request({
    url: 'page.php',
    jsonData: emails,
    success: function(response){
        var text = response.responseText;
        // process server response here
    }
});

参见 collect &amp; request 了解更多信息