好的,现在已经很晚了,我可能会错过一些愚蠢明显的东西,但是因为我接受的错误(下面)完全没有意义。
我目前在两个独立的控制器中有以下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);
}
上面的代码在ProductAdminstration
控制器的索引视图中工作,数据表使用下面的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);
但是,如果我将上述代码从ProductAdminstration(JQuery和JsonResult)复制到另一个控制器(Ordering)并将sAjaxSource更改为指向新控制器,则会抛出以下错误:
0x800a139e - JavaScript runtime error: DataTables warning: table id=products - Invalid
JSON response.
记住,我唯一改变的是sAjaxSource中的控制器名称,如果我将控制器名称更改回ProductAdminstration
而不是Ordering
,一切正常。
两个控制器都要求用户进行身份验证,但是,我已从Ordering控制器中删除了自定义处理程序以排除任何问题。我已经浏览了上述错误,虽然有很多关于这个主题的信息,但似乎没有解释是什么原因导致这个问题,在一个场景中它完全正常,但在另一个它没有“T
编辑:
如果它对任何人都有帮助,我甚至无法手动输入URL来获取http://localhost:50210/Ordering/GetProducts
的JSON结果(我还没有使用实时服务器,所以我不能指向实时URL)。它呈现页面然后抛出一个合适的东西,而不是下载。
答案 0 :(得分:0)
所以,我今晚回到代码中尝试解决错误。自定义授权属性已从控制器中删除,有时甚至将其保留,我甚至检查了我做的AuthoriseCore覆盖,以查看是否有阻止请求的内容,但无论我做什么都没有用。
最后,作为最后的努力,我删除了整个控制器,视图和与控制器关联的任何文件。添加了一个使用不同名称的新控制器,设置了一个新视图和运行数据表所需的JQUERY,并且由于某种原因(我不知道为什么)一切都按预期开始工作。
我不想知道为什么会出现这个问题以及导致问题的原因,但是我很高兴问题已经解决了。感谢评论中的帮助和建议。
修改强>
就在不久之前,我在对Route Config文件进行一些更改时找到了问题的原因。回到我在原始问题中做出的评论,这是非常明显的,并且删除控制器工作的原因是因为原始控制器在2个不同的名称下有2个RouteConfigs,而新的控制器没有设置在RouteConfig当时。因此,控制器变得困惑,不知道要看哪一个,这意味着它投入了一个合适的东西并决定它不想工作。