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

Posted

技术标签:

【中文标题】如何从网格获取值到c#控制器【英文标题】:How to get values from grid to c# controller 【发布时间】: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”列的所有值存储在数据库中

【问题讨论】:

【参考方案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
    
);

请参阅 collectrequest 了解更多信息

【讨论】:

对不起,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。

以上是关于如何从网格获取值到c#控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何在角度js中获取路由值到控制器

无法从一个视图控制器获取值到另一个

从视图获取值到控制器,然后到另一个视图

如何从非托管 C++ 代码获取结构化列表值到 C#?

如何将 AngularJS 变量值传递给 C# 控制器?

如何从axios.post发送简单的值到asp.net核心?