0

私の質問は次のとおりです。これらの 2 つのアクション結果を 1 つに結合するにはどうすればよいですか? 最初の行を 1 行だけにするのは本当に意味がないようです。しかし、抜け道が見えません。どんなアイデアでも大歓迎です。残りは背景用に提供します。

必要なJson結果を含む部分ビューを返すことに成功していますが、これを達成するために同じ名前の2つのActionResults(1つはパラメータなし)を使用しています。この方法を続けると、すべての ActionResults を 2 回繰り返す必要があります。これに関して私が抱えている問題は、最初のアクションの結果が文字通りこれ以上のことをしないことです:

[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 を使用していることに気付かないでしょう。簡潔にするために、この詳細は含めていません。しかし、それは私の質問ではありません。また、上記のコードは、次のサイトの Datatables を使用しました。

http://datatables.net/index

これは実際にはかなり良いです。繰り返しますが、上記のすべてを使用すると、私のコードはうまく機能します。だから私はそれで問題はありません。結果セットを変数にロードしてカウントし、次にスキップ...テイクなどを行うため、やや非効率的であることはわかっていますが、これも機能します。これは私の質問ではありません。

繰り返しになりますが、私の唯一の質問は、どうすればそれらの 2 つを 1 つのビューに結合できるかということです。最初の行を 1 行だけにするのは本当に意味がないようです。しかし、抜け道が見えません。どんなアイデアでも大歓迎です。

4

2 に答える 2

1

[HttpPost]使用する からおよび[HttpGet]属性を削除ActionResultします。

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"

于 2013-04-25T11:48:28.753 に答える
0

POST アクセスと GET アクセスの分離が望ましくなく、アクションが 1 つしか残っていないと仮定すると、「param」をオプションにするだけでうまくいくのではないでしょうか?

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

  // Repository action...

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