【发布时间】:2014-05-16 14:09:58
【问题描述】:
我目前正在处理一个 ASP.NET MVC 项目,我为此创建了一个控制器,该控制器具有一个返回 JsonResult 的 Action 方法。该操作基本上进入数据库,并根据传递给操作的表名执行动态 linq 查询并返回所需表的行。
我的 Action 方法如下所示:
public async Task<JsonResult> FieldValues(string table)
{
using (DbEntities ctx = new DbEntities())
{
Type type = System.Reflection.Assembly.GetExecutingAssembly().GetType("MyWebApp.Models." + table);
var query = ctx.Set(type).SqlQuery(string.Format("SELECT * FROM {0}", table));
var data = await query.ToListAsync();
return Json(data, JsonRequestBehavior.AllowGet);
}
}
这个动作是使用 jquery ($.get(...)) 从视图中调用的... 我尝试调试动作,表正确传递,查询似乎没问题,但返回语句始终没有到达!
这是我第一次使用异步操作方法,也是我第一次使用“动态 linq”。
感谢任何关于我可能做错的帮助!
谢谢!
【问题讨论】:
-
有什么东西返回给你的调用者(jQuery
$.get调用)?如果您进行同步调用(删除async并调用ToList而不是ToListAsync),这是否成功? -
不,我的 $.get 调用中的成功方法未达到,因为控制器中的操作方法未返回。这很奇怪,但我不能在查询对象上调用 ToList - 只有 ToListAsync 可用...
-
这些表有多大?如果您暂时将查询修改为“SELECT TOP 1 * FROM {0}”怎么办?
-
您的 Controller 是否派生自
AsyncController? -
经过更多调试(决定使用 $.get 返回的 jquery 承诺可用的 done 和 fail 方法)我看到调用失败:消息“数据读取器与指定的“DataModel.AR15”。类型的成员“AR151”在数据读取器中没有同名的对应列。” - 现在我只需要理解这条消息并修复它:)
标签: c# asp.net-mvc json entity-framework