ASP.NET MVC3アプリケーションがあり、アクションによって、後続のAJAX要求で使用できるようにするIDのリストが生成されます。これは、バックグラウンドで長いプロセスを実行してポーリングできるようにするためです。IDのリストは、この長時間実行されるプロセスに必要な入力です。リストが非常に長くなり、IEで問題が発生する可能性があるため、これらをパラメータとしてURLに渡したくありません。
私のコントローラー
public ActionResult Run()
{
List<MyObjs> objs = _db.MyObjs.ToList<MyObjs>();
string uniqueId = Guid.NewGuid().ToString();
ViewData["UniqueID"] = uniqueId;
TempData["ObjIdList" + uniqueId] = String.Join(",", objs .Select(o => o.ObjID).ToArray<int>());
return View(objs);
}
public void StartProcess(string uid)
{
string ids = TempData["ObjIdList" + id].ToString().Split(',');
...
}
私の見解
var uniqueId = '@ViewData["UniqueID"]';
$(document).ready(function (event) {
$('#startProcess').click(function () {
$.post("/Scheduler/StartProcess", { uid: uniqueId }, function () {
getStatus();
});
event.preventDefault;
});
});
function getStatus() {
var r = new Date().getTime(); // cache killer for IE
var url = '/Scheduler/GetCurrentProgress/' + uniqueId + "?r=" + r;
$.get(url, function (data) {
if (data != "100") {
$('#status').html(data);
setTimeout(function () { getStatus(); }, 100);
} else {
$('#status').html("Done");
};
});
}
これは、1人の同時ユーザーがいる私のラップトップではありますが、私の最初のテストでは機能しています。これは安全ですか、それともこのデータを渡すためのより良い方法がありますか?