【问题标题】:How to get values from grid to c# controller如何从网格获取值到c#控制器
【发布时间】:2013-02-01 01:51:37
【问题描述】:

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

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)
     }
})

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

【问题讨论】:

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


    【解决方案1】:

    你做错了。首先,您应该始终为模型拥有一个 [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 和 request 了解更多信息

    【讨论】:

    • 对不起,sra...实际上,这是我发送到服务器的电子邮件。基本上电子邮件地址是在网格上输入的,在我点击提交按钮后,我会在网格上获取所有电子邮件地址,以便向这些地址发送电子邮件。那我还需要 idProperty 吗?
    • @EagleFox 好的,然后看看我的编辑。我认为如果商店只是本地的,那么这可能不是严格要求的。检查我添加的内容,我想你会看到它是否有效。
    • 是的,谢谢你...使“电子邮件”成为一个对象,然后获取值,但我得到 null
    • @EagleFox 首先用 firebug 或 chrome 控制台检查您的客户端发回的内容。它应该是一个字符串数组或类似的数组。
    • 谢谢你...这是我的错误...在服务器端使用了错误的ID...就像一个魅力...:)
    【解决方案2】:
    public class UserController : ControllerBase
    {
        private DemoDbContext _dbContext;
    
        public UserController(DemoDbContext dbContext)
        {
            _dbContext = dbContext;
        }
    
        [HttpGet("GetUsers")]
        public IActionResult Get()
        {
            var users = _dbContext.demodb.ToList();
            return Ok(users);
        }
    
        [HttpPost("CreateUser")]
        public IActionResult Create([FromBody] UserRequest request)
        {
            tblDemodb user = new tblDemodb();
            user.UserName = request.UserName;
            user.FirstName = request.FirstName;
            user.LastName = request.LastName;
            user.City = request.City;
            user.State = request.Country;
            user.Country = request.State;
            _dbContext.demodb.Add(user);
            _dbContext.SaveChanges();
            return Ok();
        }
    
        [HttpPut("UpdateUser")]
        public IActionResult Update([FromBody] UserRequest request)
        {
            var user = _dbContext.demodb.FirstOrDefault(x => x.Id == request.Id);
            user.UserName = request.UserName;
            user.FirstName = request.FirstName;
            user.LastName = request.LastName;
            user.City = request.City;
            user.State = request.Country;
            user.Country = request.State;
            _dbContext.Entry(user).State = EntityState.Modified;
            _dbContext.SaveChanges();
            return Ok(_dbContext.demodb.ToList());
        }
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。
    猜你喜欢
    • 2016-07-26
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 2011-06-04
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    相关资源
    最近更新 更多