11

いくつかのクエリ文字列パラメーターにリンクされることがあるフォームがあります。問題は、フォームをポストバックすると、クエリ文字列パラメーターがまだそこにあることです。私がセットアップした方法では実際には問題ではありませんが、そこにあるのが好きではなく、特定の順序で入力をチェックする必要がある場合に問題になる可能性があります.

そのクエリ文字列パラメーターを簡単でクリーンな方法でクリアする方法はありますか? ボタンの PostBackURL を変更できることはわかっていますが、あまり効率的ではないようです。

4

12 に答える 12

12

いいえ、リダイレクトせずにクリアする方法は見たことがありません。

于 2009-05-12T17:28:21.690 に答える
7

あなた自身の質問に答えたと思います。PostBackURL プロパティを使用します。

<asp:Button PostBackUrl='<%# Request.ServerVariables["URL"] %>' runat="server" Text="Submit" />

または次のようなもの

foreach (Control ctrl in Page.Controls)
{
    if (ctrl is Button)
    {
        ((Button)ctrl).PostBackUrl = Request.ServerVariables["URL"];
    }
}
于 2009-05-12T19:10:31.523 に答える
6

これをあなたのページの一番下に置きますか?

<script language="javascript" type="text/javascript">
    document.forms[0].action = window.location.pathname;
</script>
于 2009-05-12T17:38:40.863 に答える
3

何らかの理由で Page.IsPostBack に頼ることはできないと思いますか?

サーバー側で実行している場合は、メソッド (Page_Load、OnInit など) に IsPostBack のチェックを追加し、ポストバック (つまり、最初の要求) でない場合にのみクエリ文字列を処理するのは簡単です。

于 2009-05-12T20:20:51.253 に答える
3

私はちょうど同じ問題に遭遇し、Web でいくつかのハンティングを行った後、次のスニペットを見つけました。

public void ClearQueryStrings()
{
    string clientCommand = string.Format(
      "document.forms[\"{0}\"].action = \"{1}\";",
         this.Form.Name, Request.Url.Segments[Request.Url.Segments.Length - 1]);

    ClientScript.RegisterStartupScript(this.GetType(), "qr", clientCommand, true);
}

元のクエリ文字列パラメーターの処理が完了したら、Page_Load で ClearQueryStrings() を呼び出します。ページがポストバックすると、パラメーターはなくなります。

元記事はこちら。

于 2010-01-20T15:22:46.157 に答える
3

場合によってはServer.Transfer()、クエリ文字列とフォーム データを保持するかどうかを指定できるオーバーロードを持つメソッドを使用できます。

于 2009-05-12T17:30:36.727 に答える
0
using System.Collections;
using System.Reflection;

次のコードを使用して、クエリ文字列パラメーターをクリアします。

// To clear Query string value
PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);

// make collection editable
isreadonly.SetValue(this.Request.QueryString, false, null);

// remove
this.Request.QueryString.Remove("YourQueryStringParameter");
于 2013-02-18T16:07:20.643 に答える
0

このメソッドはリダイレクトとは呼べませんが、クエリ文字列を確実に消去します。次の行を JavaScript コードの末尾に追加するだけです。

window.location.search = "";

または

これを HTML ページの最後に追加します。

<script type="text/javascript">
    window.location.search = "";
</script>

コードを挿入する場所によって、クエリ文字列を消去するタイミングが変わります。

于 2014-06-23T19:57:42.157 に答える
0

あなたResponse.Redirect(Request.CurrentExecutionFilePath()); は私のために働いていることを試すことができます。

于 2016-05-17T10:27:08.583 に答える