ASP.NETでページを更新するにはどうすればよいですか?(コードで自分自身をリロードしましょう)


158

ASP.NETでページを更新するにはどうすればよいですか?(コードで自分自身をリロードしましょう)

Sharepoint内のWebパーツ内のユーザーコントロール内にあるため、Response.Redirect()を使用したくありません。


2
私はOPではありませんが、JavaScriptを無効にできることが理由の1つかもしれません
— Nathan Koop、

11
ASP.NETはjavascriptに依存しているため、ユーザーがjavascriptを無効にしていると、さらに大きな問題が発生します...
— jrummell 2009

回答:


45

ページがクライアントに表示されると、更新を強制する方法は2つしかありません。1つはJavascriptです

setTimeout("location.reload(true);", timeout);

2番目はメタタグです。

<meta http-equiv="refresh" content="600">

サーバー側で更新間隔を設定できます。


setTimeoutはどこに置くべきですか?
— 2014

を使用して.NETでこれを行う良い方法については、以下の@gauravからの回答を参照してくださいServer.TransferRequest。
— sfarbota

サーバー側のサポートを使用していないページではこれは正しいかもしれませんが、指定された.Netに関しては間違っています。Response.Redirectを使用するのが正しい方法です。
— Phill Healey

394

ユーザーコントロールで、データを更新した後、次のことを行います。

  Response.Redirect(Request.RawUrl);    

これにより、ページが確実に再読み込みされ、ユーザーコントロールから正常に機能します。RawURLを使用Request.Url.AbsoluteUriし、リクエストに含まれる可能性のあるGETパラメータを保持しない。

__doPostBack多くのaspxページはポストバックを行うときに異なる動作をするため、おそらく使用したくありません。


4
@chris 2番目のパラメーターをResponse.Redirect(Request.RawUrl、false)として使用しますか?どうやら、それはreponse.redirectを使用するときのベストプラクティスです。どう思いますか?
— aleafonso 2012

@aleafonso:私は個人的に2番目のパラメーターを使用したことがなく、結果として問題がなかったので、何があなたを買うのかわかりません。しかし、そうです、ドキュメントによると、2番目のパラメーターを使用する必要がありますが、CompleteRequestを呼び出す場合に限ります。
— クリス

現在のページにIdパラメータ(ここではstackoverflowのquestionIdなど)がある場合、AbsoluteUriが必要になることがあります。それとも私は間違っていますか?
— CularBytes

2
@aleafonsoは正しいです-ページのすべての処理を停止する必要がない限り、これは設計計画が不十分であることを示す場合があり、2番目のパラメーターとしてfalseを渡す必要があります。2番目のパラメーターを渡さないか、trueを渡すと、HttpExceptionがスローされ、パフォーマンスに影響を与え、イベントログがいっぱいになる可能性があります。
— リップサイド、

45

これは遅いかもしれませんが、私はそれが答えを探している誰かを助けることを願っています。

これを行うには、次の行を使用できます。

Server.TransferRequest(Request.Url.AbsolutePath, false);

Response.Redirectプロセスのステップが増えるため、使用は避けてください。それが実際に行うことは:

  1. リダイレクトヘッダーを含むページを送り返します
  2. ブラウザは宛先URLにリダイレクトします。

ご覧のとおり、同じ結果は1回ではなく2回かかります。


2
Server.Transfer()がResponse.Redirect()よりも効率的な方法であることを指摘するための+1
— Jenny O'Reilly

これは、Response.Redirectが正しく機能しなかった場合に機能しました。
— Ed Bayiates

私は、これは集合例えば、ページの状態をクリアしていないことがわかってきた.Text中TextBoxか.Visibleの状態をButton。
— クラウド

38

これを試して:

Response.Redirect(Request.Url.AbsoluteUri);

1
ページの代わりにリダイレクトページを送信するだけで、実際のページを取得しないことがわかったときにブラウザーが停止するループが発生します...
— Guffa

2
リダイレクトが使用されるコンテキストに完全に依存する@Guffa。アクションまたは条件に基づいて具体的に呼び出されるアクション/コードブロックで使用される場合、反復ごとに1回だけ発生し、分離して正しくコーディングされている場合。
— Phill Healey、2015年

これにより、リダイレクト後にセッションデータが失われる可能性があります。セッションをめちゃくちゃにする完全修飾URLについて何かがあります。
— Chris Cudmore


8

のようなasp.netでページを更新するためのさまざまな方法があります...

Javaスクリプト

 function reloadPage()
 {
     window.location.reload()
 }

コードビハインド

Response.Redirect(Request.RawUrl)

メタタグ

<meta http-equiv="refresh" content="600"></meta>

ページリダイレクト

Response.Redirect("~/default.aspx"); // Or whatever your page url

6

ページ全体を更新したくない場合は、更新したいものをUpdatePanel内にラップしてから、非同期ポストバックを実行しますか?


3

個人的には、ページの状態を維持する必要があるため、すべてのテキストボックスと他の入力フィールドは値を保持します。メタ更新を行うと、新しい投稿のようになり、IsPostBackは常にfalseになるため、すべてのコントロールが再び初期化された状態になります。状態を保持するには、これをPage_Load()の最後に置きます。イベントが接続されたページに非表示のボタンを作成します(butRefresh with event butRefresh_Click(...)など)。このコードは、ユーザーが更新ボタンを自分でクリックしたのと同じように、ページにタイマーを設定してポストバックを起動します。すべての状態とセッションが保持されます。楽しい!(PSポストバックでエラーが発生した場合は、@ PageヘッダーのEnableEventValidation = "false"にディレクティブを配置する必要がある場合があります。

//tell the browser to post back again in 5 seconds while keeping state of all controls
ClientScript.RegisterClientScriptBlock(this.GetType(), "refresh", "<script>setTimeout(function(){ " + ClientScript.GetPostBackClientHyperlink(butRefresh, "refresh") + " },5000);</script>");

2

それはできません。リダイレクト(またはその他のサーバー手法)を使用する場合、実際のページをブラウザーに送信することはなく、リダイレクトページのみを送信します。

これを行うには、メタタグまたはJavaScriptを使用する必要があります。これにより、しばらく表示された後にページを再ロードできます。

ScriptManager.RegisterStartupScript(this, GetType(), "refresh", "window.setTimeout('window.location.reload(true);',5000);", true);

2

にpage_load、これを追加します。

Response.CacheControl = "no-cache";
Response.AddHeader("Pragma", "no-cache");
Response.Expires = -1;


1

この問題を解決するには、2つの方法を使用できます。1)ヘッドタグの後

<head> 
<meta http-equiv="refresh" content="600">
</head>

2)ページにヘッドタグがない場合は、JavaScriptを使用して実装する必要があります

<script type="text/javascript">
  function RefreshPage()
  {
    window.location.reload()
  }
</script>

私の連絡先:

http://gola.vn


1

ページを更新できる唯一の正しい方法はJavaScriptを使用することでした。.NETの上位の回答の多くは失敗しました。

Response.Write("<script type='text/javascript'> setTimeout('location.reload(true); ', timeout);</script>");

上記のコードをボタンクリックイベントまたはページを強制的に更新したい場所に配置します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.