0

我的问题是:如何将这两个操作结果合并为一个?让第一个只做一条线似乎没有意义。但我看不到出路。任何想法,将不胜感激。剩下的我提供背景。

我正在尝试并成功返回带有我需要的 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,并且为简洁起见,我没有包含详细信息。但这不是我的问题。上面的代码也使用了来自以下站点的数据表:

http://datatables.net/index

这实际上是相当不错的。再次,使用以上所有内容,我的代码运行良好。所以我没有问题。我知道它的效率有点低,因为它将结果集加载到一个变量中进行计数,然后跳过...采取等等,但同样,它有效,这不是我的问题。

所以我唯一的问题是,我怎样才能将它们两者结合到一个视图中。让第一个只做一条线似乎没有意义。但我看不到出路。任何想法,将不胜感激。

4

2 回答 2

1

从要使用的 中删除[HttpPost][HttpGet]属性。ActionResult

检查您的字段的有效性包含在DataTablePrameters paramlike 中:

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"into your 。$.ajax()url:"/YourController/MyResults"

于 2013-04-25T11:48:28.753 回答
0

假设只剩下一个操作就不需要分离 POST 和 GET 访问,难道只是让“param”可选吗?

public ActionResult MyResults(DataTablePrameters param = null) {
  if(param == null)
    return PartialView();

  // Repository action...

  return Json([...]);
}
于 2013-04-25T11:11:16.090 回答