2009-05-14 9 views
2

メインページと詳細ページがあります。PopUpとは別のページにポストバックが発生する

詳細ページは、メインページから呼び出されるjavascriptポップアップです。

詳細ページで「保存」ボタンをクリックすると、メインページを「最新表示」します。

メインページへのポストバックを呼び出す方法と、詳細ページの保存ポストバックを維持する方法はありますか?

編集 - window.opener.location.reload(true)を使用して作業を行いますが、それは情報を再送信を促します。この 'document.location.href = document.location.href;'メインページのフォームが消去されるため、どちらも機能しません。

+0

メインページは絶対にポストバックする必要がありますか? もしそうでなければ、メインページのupdatepanelを使用してポップアップから「更新」します。 – MattK311

答えて

1

はい、詳細ページのリンクでtarget = "_ parent"を実行できるはずです。 イベントをバインドして詳細ページを閉じる必要がありますが、開始する必要があります。

例: <a href="mainPage.html" target="_parent">Save Details</a>

+0

Hrm ...あなたが何を言おうとしているかわからない。私は何も閉じたくはないし、私はすでに私の詳細ページから保存しています。詳細ページが保存されると、メインページを更新するだけです。おそらくあなたは自分自身をさらに説明することができます。 – user79755

1

あなたはwindow.openerと、いくつかのJavaScriptを使用して、ポップアップから親ウィンドウにアクセスすることができます。 そこから、たとえば、location.hrefを使用して親ページを更新することができます。 :)

+0

はい、ありがとうございます。私はこれを調べます。 – user79755

2

javascriptで別のウィンドウを開くのではなく、詳細ページでモーダルポップアップを使用することをお勧めします。これにより、すべてのページを同じページに保存できるようになり、より多くのコントロールが可能になります。

あなたは正しい方向に進んでいると思います。これを試して、それがあなたのニーズに合っているかどうかを見てください。

window.opener.location.href='http://redirect.address'; 

Here私は上のAJAXのUpdatePanelを配置するときと同じ質問

+0

しかし、優れたアイデアは、ポップアップウィンドウを使って詳細を比較することです。すなわち、さまざまな詳細ポップアップウィンドウを並べて配置し、詳細を比較します。 – user79755

+0

彼らは何人を比較しようとしていますか?彼らが2つのアイテムを比較するだけであれば、1つのアイテムが表示されたモーダルポップアップを表示し、ユーザーが別のアイテムを追加できるようにすることができます。真ん中を線で分割し、新しい項目の対応するデータを表示するだけです。それ以外の場合は、2つ以上のフィールドがある場合に比較するフィールドにリピータを使用できますが、これはちょっと乱雑になる可能性があります。 –

+0

最大6つの詳細を比較できます。あなたはモーダルにする方法があるのは間違いありませんが、今は別の解決策を追求します。 – user79755

1

私はあなたがポストバックを行うために必要と知っているが、私はこの提案を提供します...

ですメインページを開き、詳細ポップアップでその情報を更新できるようにします。私はあなたが持っているマイクロソフトのajaxとajaxコントロールキットにどのくらいの好きなものがあるのか​​よくわからないが、それが私の最初のアプローチだろう。

明らかに私は完全な範囲を知っていませんが、JavaScriptベースのソリューションを使わずにデータの再送信とページの更新を求めるページの問題はありません。

2

アップデートパネルフリーソリューションの場合、ポップアップでテキストフィールドに値を返し、そのテキストフィールドのポストバックを変更することができます。

1

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); 
     } 
     } 
    } 
    } 
})(); 
関連する問題