Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在不同的控制器和视图中使用完全相同的代码时,Datatables会引发错误_C#_Jquery_Asp.net Mvc 5_Jquery Datatables - Fatal编程技术网

C# 在不同的控制器和视图中使用完全相同的代码时,Datatables会引发错误

C# 在不同的控制器和视图中使用完全相同的代码时,Datatables会引发错误,c#,jquery,asp.net-mvc-5,jquery-datatables,C#,Jquery,Asp.net Mvc 5,Jquery Datatables,好吧,现在已经很晚了,我可能错过了一些非常明显的错误,但就目前而言,我收到的错误(下面)是毫无意义的 我目前在两个单独的控制器中有下面的C#代码,基本上其中一个JsonResults中返回的结果会有所不同,但现在我复制了代码以排除潜在问题 public JsonResult GetProducts(DataTableParameters param) { var products = _productsRepository.GetAll().ToList(); var tota

好吧,现在已经很晚了,我可能错过了一些非常明显的错误,但就目前而言,我收到的错误(下面)是毫无意义的

我目前在两个单独的控制器中有下面的C#代码,基本上其中一个JsonResults中返回的结果会有所不同,但现在我复制了代码以排除潜在问题

public JsonResult GetProducts(DataTableParameters param)
{
    var products = _productsRepository.GetAll().ToList();

    var totalRecords = products.Count();
    var filteredUsers = totalRecords;

    if (!string.IsNullOrEmpty(param.sSearch))
    {
        products =
            products.Where(w => w.ProductName.Contains(param.sSearch) ||
                w.Description.Contains(param.sSearch)).ToList();

        filteredUsers = products.Count();
    }

    var productList = products.Select(product => new[] { 
        Url.Action("Details", "ProductAdminstration", new {id = product.ProductId}),
        product.Description,
        product.Price.ToString(),
        string.Empty,

        product.ProductName,
        Url.Action("Edit", "ProductAdminstration", new { id = product.ProductId }),
        Url.Action("Delete", "ProductAdminstration", new { id = product.ProductId })
    });

        var parms = new
        {
            sEcho = param.sEcho,
            iTotalRecords = totalRecords,
            iTotalDisplayRecords = filteredUsers,
            aaData = productList
        };

        return Json(parms, JsonRequestBehavior.AllowGet);
}
上面的代码在
ProductAdministration
控制器的索引视图中工作,datatables使用下面的JQuery呈现预期的数据,显然是一个在HTML中呈现的具有适当ID的表

oTable = $("#products").dataTable({
    "oLanguage": {
    "sEmptyTable": "No results available",
    "sSearch": "Search",
    "sLengthMenu": "Show _MENU_",
    "sProcessing": "Processing" },
    "bServerSide": true,
    "sAjaxSource": "@Url.Action("GetProducts", "ProductAdminstration")",
    "bProcessing": true,
    "aoColumns": [ 
        //RENDER COLUMNS HERE 
    ]}).fnSetFilteringDelay(500);
但是,如果我将上述代码从ProductAdministration(JQuery和JsonResult)复制到另一个控制器(排序),并将sAjaxSource更改为指向新控制器,则会抛出以下错误:

0x800a139e - JavaScript runtime error: DataTables warning: table id=products - Invalid 
JSON response.
请记住,我唯一更改的是sAjaxSource中的控制器名称,如果我将控制器名称更改回
ProductAdministration
,而不是
Ordering
,一切都会正常工作

这两个控制器都要求对用户进行身份验证,但是,我已将自定义处理程序从排序控制器中移除,以排除任何问题。我环顾了一下上面的错误,虽然有很多关于这个主题的信息,但它似乎无法解释是什么导致了这个问题,在一种情况下,它工作得非常好,但在另一种情况下,它没有

编辑:


如果它对任何人都有帮助的话,我甚至无法手动键入URL以从
http://localhost:50210/Ordering/GetProducts
(我还没有使用实时服务器,因此无法将您指向实时URL)。它呈现页面,然后抛出嘶嘶声,而不是进行下载。

因此,我今晚回到代码,尝试解决错误。自定义授权属性已从控制器中删除,有时甚至保持打开状态,我甚至检查了我所做的授权重新覆盖,以查看是否存在阻止请求的内容,但无论我做什么,都不会起作用

最后,作为最后的努力,我删除了整个控制器、视图以及与控制器关联的所有文件。使用不同的名称添加了一个新的控制器,设置了一个新的视图和运行数据表所需的JQUERY,由于某种原因(我不知道为什么),一切都开始按预期工作

我讨厌不知道这个问题的原因和原因,但是我很高兴问题已经解决了。感谢评论中的帮助和建议

编辑


因此,几分钟前,我在对路由配置文件进行一些更改时发现了问题的原因。回到我在原始问题中所做的评论,这是非常明显的,删除控制器之所以有效是因为原始控制器在两个不同的名称下有两个RouteConfig,而新控制器当时没有在RouteConfig中设置。因此,控制器感到困惑,不知道该看哪一个,这意味着它发出嘶嘶声,决定不工作。

你能试着从出错的控制器复制JSON响应并通过运行吗?不幸的是,服务器逻辑中的JsonResult从未命中。在错误开始之前,我就在方法中设置了断点,这样我就可以在运行时对其进行测试,在错误控制器中从未达到断点。您是否使用Fiddler查看发送和接收的内容?当我遇到这样的情况时,我会用小提琴来看看有什么不同。另外,它也是一个很好的工具。Fiddler报告所有状态代码为200的事件,包括
GET/Ordering/GetProducts?sEcho=1&iColumns=4&scoolumns=%2C%2C….
,但没有明显的问题。但是,控制器方法没有被触及。两个控制器的代码完全相同,JQuery只使用新的控制器路径进行了修改,这是唯一的更改。如果代码没有查看我当前所在的控制器,那么代码为什么会工作是没有意义的。在其他条件相同的情况下,您提到的唯一区别是“我已经从排序控制器中删除了自定义处理程序”。如果您将其从
ProductAdministration
中删除,会发生什么情况?很高兴听到这个消息,很抱歉我没有得到更多帮助。没问题,非常感谢您的帮助。老实说,我只是在几秒钟前修改一些代码时意外地发现了问题的路由原因。我马上要更新答案。