如何返回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,等等,但是它仍然有效,这不是我的问题。

所以我唯一的问题是,我如何将它们两个组合成一个视图。让第一个人只做一行似乎没有任何意义。但我看不到出路。

如何返回Json作为我在c# MVC视图的一部分

从要使用的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([...]);
}