我有以下方法应该返回一个JSONResult,所以我可以在一个带有javascript的AJAX方法中使用它并为文本框加载自动完成建议。我会在每次特定的下拉列表更改时加载它。
[AcceptVerbs(HttpVerbs.Post), Authorize]
private JsonResult GetSchemaNodeValues(string SchemaNodeId)
{
var query = @"Select ld.""Value""
From ""LookupData"" ld, ""SchemaNode"" sn
Where sn.""LookupTypeId"" = ld.""LookupTypeId""
And sn.""SchemaNodeId"" = '{0}'";
DataSet data = new DataSet();
data = ServiceManager.GenericService.ExecuteQuery(String.Format(query, SchemaNodeId)).Data;
var res = data.Tables[0].AsEnumerable().Select(dr => new
{
Value = dr["Value"].ToString()
});
return JsonConvert.SerializeObject(res);
}
我在return JsonConvert.SerializeObject(res);
Error 106 Cannot implicitly convert type 'string' to 'System.Web.Mvc.JsonResult'
有没有办法超越这个?
在此之前我尝试使用System.Web.mvc.Controller.Json(res);它从对象返回一个JSONResult。
但是我无法使用它,因为我的类是PageDialog而不是Controller,因此它无法访问Controller的受保护的内部方法,如JSon()。我得到的错误是JSon()由于其保护级别而无法访问。 Controller类已被锁定,我无法公开或创建变通方法所以我使用JsonConvert.SerializeObject(res)改变了方法;
非常欢迎任何建议。
答案 0 :(得分:1)
private dynamic GetSchemaNodeValues(string SchemaNodeId)
{
...
return data.Tables[0].AsEnumerable().Select(dr => new
{
Value = dr["Value"].ToString()
});
}
或
private string GetSchemaNodeValues(string SchemaNodeId)
{
...
var result = data.Tables[0].AsEnumerable().Select(dr => new
{
Value = dr["Value"].ToString()
});
return JsonConvert.SerializeObject(result);
}