4

同じコントローラー内に 2 つのアクションがあります。

public ActionResult Index(string filter, int[] checkedRecords)

public ActionResult ExportChkedCSV(string filter, int[] checkedRecords)

2 番目のアクション (ExportChkedCSV) には、次のリダイレクトが含まれています。

if (reject != 0)
        {
            return RedirectToAction("Index", new { filter, checkedRecords });
        }

ステップスルーすると、パラメーターcheckedRecordsはRedirectToActionステートメントで正しく入力されますが、そこからIndex ActionResultにヒットすると、checkedRecordsはnullになります。filter =、checkedRecords = などを試してみました。ビューからコントローラーまで問題ありません。配列の型を別のものに変更すると、値を取得できます。アクションからアクションに int[] を渡すにはどうすればよいですか? 私は何を間違っていますか?ありがとうございました

4

3 に答える 3

6

MVC では複合型をリダイレクト パラメーターとして送信できません。数値や文字列などのプリミティブ型のみを送信できます。

TempData を使用して配列を渡す

...
if (reject != 0) {
    TempData["CheckedRecords"] = yourArray;
    return RedirectToAction("Index", new { filter = filterValue });
}
...

public ActionResult Index(string filter) {
    int[] newArrayVariable;
    if(TempData["CheckedRecords"] != null) {
        newArrayVariable = (int[])TempData["CheckedRecords"];
    }
    //rest of your code here
}
于 2012-05-21T01:09:27.317 に答える
1

渡した int 配列を使用して URL を作成する方法を ASP.Net が認識しているかどうかはわかりません。int 配列がリソースを一意に識別する場合は、配列をハイフンで区切られた (または同様の) 文字列に変換してから、Index メソッド内で文字列を解析してみてください。

リクエスト間でデータを保持しようとしているだけの場合は、TempData を使用します。

http://msdn.microsoft.com/en-us/library/system.web.mvc.controllerbase.tempdata.aspx

于 2012-05-21T00:35:24.083 に答える
1

2 つの null 値を送信しています。new {} を使用すると、新しいオブジェクトが作成されます。インデックス名だけでなく、値も定義する必要があります。

return RedirectToAction("Index", new { filter = filter, checkedRecords = checkedRecords });
于 2012-05-20T23:45:31.167 に答える