我的问题涉及使用Entity Framework / Kendo Grid和Web API 2控制器而不使用ASP.NET MVC / Razor。我的所有代码都是控制器中的C#或直接的HTML / JavaScript。
似乎Kendo Grid更适合直接使用表/视图而不是使用存储过程,我是否在此评估中更正?
我试图在EF中使用一个带有自定义操作名称的存储过程来返回IEnumerable
并且它正好填充网格,但是当我尝试点击“保存更改”按钮时,它会尝试执行POST和PUT(我实际上认为它正在执行POST,因为其中一行没有定义主键)。
我还应该提一下,我认为模型并不完全相同,因为在网格中返回的字段不一定与我在保存/更新过程中触发的内容相关联1:1。我在GET中有更多字段返回给我,并且我在kendoDataSource中指定了模型,但是当我单击保存更改时,我可以自定义并选择要发回的内容吗?
在调试过程中,我看到网络检查器中出现了正确的行,但当我在POST方法中查看它在Web API 2控制器中的命中时,当我将鼠标悬停在对象上时,我甚至看不到任何值返回 - 这可能是另一个问题。
所以在核心,我的问题是......
是否可以在GET过程中将一个模型返回值发送到kendo网格,并且在批量保存期间,在此网格上的PUT / POST过程中返回完全不同的模型? Kendo Grids似乎更喜欢直接使用表格或视图,但我的政策是根本不能触及表格,我们不想使用视图,我们更喜欢完全存储过程。
kendo网格在进行批量更新/保存时,即使它说它是批量的,它是否最终每行发送数据,所以一次一个?或者它是否真的将数据作为一个批次发送?
我们正在使用网格检索动态数据,行不会被修复,我已经使用模板稍微添加CSS类到包装单元格的元素,但这不会是足够灵活,但在说,我想知道是否有办法将数据从网格中拉出来,并将其扔到前端的一些隐藏表或值中,并在网格范围内有一个单独的保存按钮,保存用户新输入的值...?
提前谢谢
答案 0 :(得分:0)
对于更新,使用存储过程非常容易。您将拥有类似
的方法public ActionResult Products_Update([DataSourceRequest]DataSourceRequest request, Product product)
在这里,您可以删除所有属性,并将它们用作存储过程中的参数。
如果选择那么就很难避免使用表格。这是因为所有的分页和排序都基于一个基本上是一段sql的IQueryable。然后在扩展方法中给出分页和排序。你有这样的方法:
public ActionResult Products_Read([DataSourceRequest]DataSourceRequest request)
你可以在请求中捕获所有内容并手动处理排序和分页,但是使用视图或表格,您只需调用扩展方法并获取所有内容:
var result = products.ToDataSourceResult(request);
答案 1 :(得分:0)
所以,我想出了我的问题。
1。)在控制器中,我需要一个类似于此的方法声明......
public IHttpActionResult UpdateProcedure([FromBody]IEnumerable<somevalue> models)
我认为这里的关键是[FromBody] IENumerable模型
和
2。)在Kendo Grid中,我需要确定......
我在DataSource中有这一行(我进行了READ,UPDATE和CREATE调用
contentType: "application/json; charset=utf-8",
和
batch: true
和
parameterMap: function(options, operation) {
if (operation !== "read" && options) {
return JSON.stringify(options.models);
}
}
这些东西的组合至少使我能够在Web API 2 Controller中看到模型和值。
感谢所有的帮助。