如何从网格获取值到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
);
请参阅 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。以上是关于如何从网格获取值到c#控制器的主要内容,如果未能解决你的问题,请参考以下文章