0

我有以下应该返回 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); 更改了方法;

任何建议都将非常受欢迎。

4

1 回答 1

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);
}
于 2012-11-27T16:33:58.683 回答