0

Page1 にこのリテラル コントロールがあります。

 string s1 = "<table>"
           + "<tr>"
           + "<td>AAA</td>"
           + "<td>AAA</td>"
           + "</tr>"
           + "<tr>"
           + "<td>BBB</td>"
           + "<td>BBB</td>"
           + "</tr>"
           + "</table>"
           + "<br />";

 string s2 = "<input type=\"button\" onclick=\"window.open('Page2.aspx','','Height=500,width=500')\" value=\"pop up\" />";

 LiteralControl lc = new LiteralControl(s1 + s2);
 Div1.Controls.Add(lc);

ご覧のとおり、これは単純な HTML テーブルとボタンです。
私がしたいことは、ボタンをクリックして Page2.aspx をポップアップし、ボタンのないリテラル コントロール (lc) を Page2.aspx (Div1) の Div に追加することです。

私はこれを機能させることができません。
これを実現するために、Page1 はサーバーにポストバックしてはなりません。

4

2 に答える 2

1

ページ間でデータを渡すには、次の 3 つの方法しかありません。

  • 値を取得する

  • POST 値

  • サーバー変数 (セッションなど)

サーバー変数は最も柔軟なソリューションであり、正しく使用すればパフォーマンスに深刻な影響を与えることはありません。しかし、あなたはその選択肢を除外しました。

POST 値は別のオプションです。それらはフォーム内の HiddenFields に保存されますが、それらを使用するにはフォームを送信する必要があります。また、ポップアップを開くリンクを使用しているため、これは適切な解決策ではありません。

これにより、GET 値が残ります。URLのクエリ文字列内に値を格納しています。これ機能しますが、約 8 KB のサイズ制限があります。HTML のサイズをその範囲内に抑えることができる場合は、HTML をBase64 でエンコードする必要があります (これは HTML を暗号化するのではなく、1 つのきちんとした文字列にパッケージ化するだけです)。エンコードされた文字列をURL (つまり " Page2.aspx?data=SomeString") を取得し、Page2 でその値を取得しRequest.Params["data"]、Base64 でデコードして、その値をローカルのリテラル コントロールに配置します。

しかし、あなたの価値はそれよりもはるかに大きいようです。そのため、サーバー変数を使用するか、HTML をどこかに保存して参照を渡す必要があります。たとえば、生成された HTML を一意の識別子キーを使用してデータベース内に保存し、そのキーを Page2 に渡すだけで、DB に実際の HTML を問い合わせることができます。

于 2012-12-26T22:38:11.110 に答える
-1

これはひどいプログラミング方法です.aspxページで HTML を処理し、コード ビハインド パーツでデータを処理する必要があります。

たとえば、データ(たとえば、あなたDataTableの)をセッションオブジェクトに追加するか、GridView単に行うコントロールを利用します:

myGridView.DataSource = dt;
myGridView.DataBind();

同じものを再利用しているため、その上にあるユーザーコントロールを使用できますmyGridView

この方法では、コード処理ページで HTML 形式を処理するのではなく、コントロールを再利用します。明日、何かが起こった場合でも、1 つのファイルだけを簡単に変更でき、そのコントロールを持つすべての場所が自動的に変更されます。


それでも適切なプログラミング ルールをあまり気にしない場合は、Literal コントロールをたとえばセッション オブジェクトに追加して、2 ページ目で呼び出すことができます。

LiteralControl lc = new LiteralControl(s1 + s2);

// Add control to a Session instance
Session["myLiteralControl"] = lc;

Div1.Controls.Add(lc);

あなたの他のページで:

LiteralControl lc = (Literal)Session["myLiteralControl"];
Div1.Controls.Add(lc);
于 2012-12-26T21:04:41.167 に答える