2016-08-03 15 views
-1

ほとんどの場合、QueryStringで問題が発生します。結果ページから検索ページに戻るとすべてが崩れます。 QueryStringを使用して、結果ページが生成される前にチェックされたすべてのボックスをチェックします。今回は、チェックボックスのチェックを外すことができますが、視覚的にしかできません。結果ページは、まだチェックされているかのように生成されます。カンツのチェックボックスをオフにします。 ASP.NET

これは簡単な例です。私は、Default.aspxのに行けば、私が追加した場合、私は(B1?Default.aspxのを= 1)「B1 = 1?」...

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Request.QueryString["B1"] != null) 
    { 
     CheckBox1.Checked = true; 
    } 
} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    string QString = null; 
    if (CheckBox1.Checked) 
    { 
     QString += "?B1=1"; 
    } 
    Response.Redirect("/TestPage1.aspx" + QString); 
} 

をチェックボックスとボタンを追加している私は、チェックボックスがチェックされているページを取得します。これをオフにしてButton1を押すと、 "TestPage1.aspx?B1 = 1"にリダイレクトされます

誰かがこの問題の解決策を持っていますか?

+0

チェックボックスとラジオボタンは、asp.netでかなりバグです。このスレッドをチェックしてください:http://stackoverflow.com/questions/1523606/asp-net-checkbox-value-at-postback-is-wrong – Sal

答えて

1

私が正しく理解している場合は、チェックボックス(/TestPage1.aspx?B1=1)をチェックしてTestPage1にいて、チェックボックスを手動でオフにしてButton1をクリックすると、/TestPage1.aspx?B1=1に戻り、チェックボックスが再確認されます。

これは、Page_Loadイベントが、Button1のOnClickイベントなどの制御イベントの前に発生するために発生します。 Here is the MSDN documentationページライフサイクルイベントの詳細。

ページが/TestPage1.aspx?B1=1にポストバックされているため、ハンドラは、Button1_Clickが削除する可能性がある前にクエリ文字列を確認します。 Button1_Clickハンドラが実行されるまでに、チェックボックスは既に再チェックされており、ハンドラは同じURL、つまりクエリ文字列にリダイレクトされます。

例の簡単な解決策は、Page_LoadイベントのIsPostBackプロパティを確認し、ページがポストバックしていない場合にのみチェックボックスをオンにすることです。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack && Request.QueryString["B1"] != null) 
    { 
     CheckBox1.Checked = true; 
    } 
} 
0

それはこのように書きます:

  1. あなたは、あなたのブラウザにロードさ/TestPage1.aspx?B1=1を持っています。
  2. あなたは、ブラウザでCheckBox1をオフにして、完全な/TestPage1.aspx?B1=1アドレスのサーバー上Button1
  3. Page_Load()実行]をクリックします。クエリの文字列がB1と表示されるので、CheckBox1が再度チェックされます。
  4. Button1_Click()がサーバーで実行されます。 CheckBox1がチェックされているので、QStringにはB1が再度含まれています。サーバーは現在、(完全なクエリ文字列がまだ含まれている/TestPage1.aspx?B1=1にリダイレクトします。
  5. Page_Load()再び実行され、CheckBox1をもう一度確認として設定されている。
  6. ページ最終的にあなたがCheckbox1を観察し、ブラウザに返送されています今、あなただけ(?B1=1なし)ブラウザでTestPage1.aspxを持っている場合は、あなたオフにチェックボックスを残すことができるだろう。

をチェックする。しかし、限り、それ?B1=1があるとして、イベントの周期は常にありますもう一度やり直すつもりです。

ここで最もよくある間違いは、手順3を期待しないことです。すべてのサーバーイベント(単純なボタンのクリックも)はfull page lifecycleの一部として実行されることに注意してください。 チェックボックスを設定する前にPage_Load()!IsPostBack()テストを含めるように変更すると、これを助けることができます。

関連する問題