如何返回Json作为我在c# MVC视图的一部分
本文关键字:MVC 视图 一部分 何返回 返回 Json | 更新日期: 2023-09-27 18:10:46
我的问题是:我如何将这两个操作结果合并为一个?让第一个程序只做一行似乎没有意义。但我看不到出路。任何想法都将不胜感激。其余部分作为背景。
我正在尝试并成功地返回我需要的Json结果的部分视图,但我使用两个同名的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,为了简短起见,我没有包括这方面的细节。但这不是我的问题。以上代码还使用了来自以下站点的数据表:
http://datatables.net/index这些都很好。同样,使用上述所有功能,我的代码运行良好。所以我对它没有意见。我知道这有点低效,因为它加载结果集到一个变量做计数,然后跳过…Take,等等,但是它仍然有效,这不是我的问题。
所以我唯一的问题是,我如何将它们两个组合成一个视图。让第一个人只做一行似乎没有任何意义。但我看不到出路。
从要使用的ActionResult
中删除[HttpPost]
和[HttpGet]
属性。
检查DataTablePrameters param
中包含的字段的有效性,如:
public ActionResult MyResults(DataTablePrameters param = null) {
if(string.IsNullOrEmpty(param.sEcho) && string.IsNullOrEmpty(param.iDisplayStart) && string.IsNullOrEmpty(param.iDisplayLength))
return PartialView();
//Do something
return Json(...);
}
在你看来,你仍然可以使用type:"POST"
到你的$.ajax()
与url:"/YourController/MyResults"
,就像你已经做了我的建议。
假设POST和GET访问的分离是不需要的,只剩下一个操作,不只是使"param"可选做的技巧?
public ActionResult MyResults(DataTablePrameters param = null) {
if(param == null)
return PartialView();
// Repository action...
return Json([...]);
}