【发布时间】:2013-04-25 10:52:46
【问题描述】:
我的问题是:如何将这两个动作结果合并为一个? 让第一个只做一行似乎没有意义。但我看不到出路。任何想法,将不胜感激。剩下的我提供背景。
我正在尝试并成功返回带有我需要的 Json 结果的部分视图,但我使用两个同名的 ActionResult(一个带有参数一个没有)来实现这一点。如果我以这种方式继续,我将不得不重复我所有的 ActionResults 两次。我遇到的问题是,第一个操作结果只不过是字面意思:
[HttpGet]
public ActionResult MyResults()
{
return PartialView();
}
用于返回视图。在视图中,我有一些 JQuery/Ajax,它们依次调用另一个同名但带有参数的操作结果。此操作结果有效地填充了一个 Json 对象,然后将其解析并作为表格呈现到上面的视图中。这个 actionresult 有效地完成了所有工作。它看起来像:
[HttpPost]
public ActionResult MyResults(DataTablePrameters param)
{
//Get the full list of data that meets our needs
var fullList = _myResultsRepository.GetListByID(Id);
//Count the records in the set
int count = fullList.Count();
//Shorten the data to that required for the page and put into object array for Json
var result = from r in fullList.Skip(param.iDisplayStart).Take(param.iDisplayLength)
select new object[]
{
r.field1,
r.field2,
r.field3
};
//Return Json data for the Datatable
return Json(new
{
sEcho = param.sEcho,
iTotalRecords = param.iDisplayLength,
iTotalDisplayRecords = count,
aaData = result
});
}
那些不熟悉它的人不会知道我正在使用 DI/IOC,并且为简洁起见,我没有包含详细信息。但这不是我的问题。上面的代码也使用了来自以下站点的数据表:
实际上相当不错。再次,使用以上所有内容,我的代码运行良好。所以我没有问题。我知道它的效率有点低,因为它将结果集加载到一个变量中进行计数,然后跳过...采取等等,但它再次起作用,这不是我的问题。
所以我唯一的问题是,我怎样才能将它们两个合并到一个视图中。让第一个只做一条线似乎没有意义。但我看不到出路。任何想法将不胜感激。
【问题讨论】:
-
我想在未来向读者解释,这个问题会误导人们回答假设我错误地想要删除 HttpPost/Get 属性,这不是我的意图,也不是我的建议。所以我的代码实际上是正确的方法。虽然我确实得到了一个基于接受的答案的解决方案。建议读者仔细研究这样做的安全问题。正如公认的答案所建议的那样,最好保持原样,因为它可以防止打开您必须编程才能修复的安全漏洞。本质上为什么要修复未损坏的内容。
标签: c# asp.net-mvc json linq jquery-datatables