POSTを再送信せずにページを更新してフォームデータを保持する必要がある場合は、フォームデータのサイズと複雑さに応じて、JavaScriptでフォーム状態の表現を作成して保存することができますクッキーまたはクエリ文字列で、document.location.hrefを設定してページをリフレッシュし、ウィンドウがロードされたときにデータをリロードします。
以下は、このアイデアの概略です。このコードは、onload wire-upとともに、オープナーに入ります(クッキー処理メソッドも追加する必要があります)。 window.opener.refreshWithState()がポップアップから呼び出されます。
(このバージョンは、固有のIDを持つ入力に依存)
(function() {
window.refreshWithState = function() {
setCookie("state", buildState());
document.location.href = document.location.href;
};
function handleWindowLoad() {
var state = readCookie("state");
if (state) {
restoreState(state);
eraseCookie("state");
}
}
function buildState() {
var i, elem, elems, key, val, stateParts = [];
elems = document.getElementsByTagName('INPUT');
for (i = 0; elem = elems[i]; i++) {
switch (elem.type) {
case "checkbox":
case "radio":
val = elem.checked ? 1 : "";
break;
case "text":
case "hidden":
case "file":
val = escape(elem.value);
break;
default:
continue;
}
stateParts.push('"' + escape(elem.id) + '":"' + val + '"');
}
elems = document.getElementsByTagName('SELECT');
for (i = 0; elem = elems[i]; i++) {
stateParts.push('"' + escape(elem.id) + '":"' + elem.selectedIndex + '"');
}
return '{' + stateParts.join(',') + '}';
}
function restoreState(state) {
var key, elem, val;
var stateObj = eval('(' + state + ')');
for (key in stateObj) {
elem = document.getElementById(unescape(key));
if (!elem) {
continue;
}
val = stateObj[key];
if (elem.tagName == "SELECT") {
elem.selectedIndex = val;
}
else if (elem.tagName == "INPUT") {
switch (elem.type) {
case "checkbox":
case "radio":
elem.checked = !!val;
break;
case "text":
case "hidden":
case "file":
elem.value = unescape(val);
}
}
}
}
})();
メインページは絶対にポストバックする必要がありますか? もしそうでなければ、メインページのupdatepanelを使用してポップアップから「更新」します。 – MattK311