JavaScriptからintの配列をint配列とintの2つのパラメータを受け入れるMVCコントローラに渡そうとしています。これは、コントローラアクションによって返されたビューへのページリダイレクトを実行することです。MVCコントローラにint配列を渡す
var dataArray = getAllIds(); //passes back a JavaScript array
window.location.replace("/" + controllerName + "/EditAll?ids=" + dataArray + "¤tID=" + dataArray[0])
dataArrayにはサンプルの使用に期待される1,7が含まれています。
コントローラコード
public virtual ActionResult EditAll(int[] ids, int currentID)
{
currentModel = GetID(currentID);
currentVM = Activator.CreateInstance<ViewModel>();
currentVM.DB = DB;
currentVM.Model = currentModel;
currentVM.ViewMode = ViewMode.EditAll;
currentVM.ModelIDs = ids;
if (currentModel == null)
{
return HttpNotFound();
}
return View("Edit", MasterName, currentVM);
}
問題は、コントローラに渡されたint型[] idを検査する場合、それの値がnullであるということです。 currentIDは期待どおりに1に設定されます。
jQuery.ajaxSettings.traditional = trueを設定してみましたが効果がありません JavaScriptで@ Url.Actionを使用してサーバー側のURLを作成しようとしました。 また、配列を渡す前にJSON.Stringifyを試しました。
window.location.replace("/" + controllerName + "/EditAll?ids=" + JSON.stringify(dataArray) + "¤tID=" + dataArray[0])
この場合も、id配列はコントローラ側でnullになります。
コントローラに正しく渡すためにint配列を取得するためのポインタがありますか?コントローラアクションでパラメータをStringとして宣言し、パラメータを手動でシリアライズおよびデシリアライズすることはできますが、単純な型変換を自動的に行うためにフレームワークを取得する方法を理解する必要があります。
ありがとうございます!
配列をループして各要素をクエリ文字列に追加して長い文字列を作成しなければならないという事実はありませんか? –
jQueryを使用しているとタグ付けしました。したがって、 '$ .param' http://api.jquery.com/jQuery.param/を使用してエンコードされた値を作成することができます。 ( "ids:dataArray、currentId:dataArray [0]}))' $ "の値を返します。 –