0

サーバー上のオブジェクトの1つから生成された非常に単純なhtmlレポートがあります。PageLoadセッションからそのオブジェクトをクリアする必要があり、ユーザーがリンクボタンをクリックした後に外部のWebサービスにデータを要求したくないため、 でhtmlコードを生成します。

大まかに言うと、ユーザーがページ上のボタンをクリックすると、レポートが新しいウィンドウに表示されます。

私が言ったように、私はhtmlを生成しPageLoad、現在サーバーの一意のファイルに保存しています。また、隠しコントロールでhtmlコードを隠すことができると思いました。しかし、それは余分な作業なしでは機能しません。それは、htmlコードを意味のない文字列に変換し、後で復元します。

を使用して、HTMLコードを現在のウィンドウに表示することができますResponse.Write(myhtml as string);

だから私の質問は:

  1. HTMLコードをファイルシステム以外の場所に保存できますか(セキュリティの問題で注意が必要です)
  2. クリックイベント時にhtmlcodeを新しいウィンドウに表示する方法。どのように使用できますか。

ここで説明されている1つの可能な解決策を見つけました。

アップデート:

コードを追加するだけです。現在のウィンドウにhtml文字列が表示されますが、これは私が望んでいるものではありません。

private void InitData(){  
  string filename = DateTime.Now.ToString("yyyyMMdd_HHmmssfff");
  lbtnPrintOutOrder.CommandArgument = filename;
  StreamWriter swXLS = new StreamWriter((MapPath("Files\\")) + filename);

  string message = GetEmail();//get data form session object

  swXLS.Write(message);//save data to file
  swXLS.Close();
}

protected void lbtnPrintOutOrder_Command(object sender, System.Web.UI.WebControls.CommandEventArgs e)
{
   string filePath = (MapPath("Files\\")) + e.CommandArgument.ToString();

  string content;
  using (StreamReader reader = File.OpenText(filePath)) {
     content = reader.ReadToEnd();//get html from file
  }
  Response.Write(content);//load it to current window
  Response.End();
}
4

1 に答える 1

0

大きな疑問の 1 つは、なぜセッションからオブジェクトをクリアする必要があるのか​​ということです。文字列が新しいウィンドウに表示されるまで、オブジェクトをセッションに保持できないのはなぜですか?

新しいウィンドウで aspx ページを開き、セッションに保存されている文字列オブジェクトを使用して html を出力し、html が表示されたらセッションをクリアできます。

于 2008-12-17T16:13:07.273 に答える