2

テンプレート テーブルからデータを取得するドロップダウン リストがあります。新しいテンプレートを挿入するための [追加] ボタンがあります。[追加] ボタンをクリックすると、新しい値を挿入するための jQuery ポップアップが表示されます。新しいデータを保存するための保存ボタンがあります。On_Save_Click 新しいデータを入力して、ポップアップを閉じます。

問題は次のとおりです 。ページを更新すると、ページに値が再度入力されます。だから、私は重複したエントリを取得します!

質問: この問題を回避するにはどうすればよいですか? 私は Satckoverflow と Google を調べましたが、どちらも別のページにリダイレクトすることを提案しています。ユーザーを別のページにリダイレクトしたくありません。同じフォームを使用してこの問題を回避するにはどうすればよいですか? 助けてください。

4

4 に答える 4

4

viewstate または session を使用して、データが既に挿入されている (ボタンが押されている) かどうかを示すことができます。

このようなもの:

private void OnbuttonAdd_click()
{
   if(ViewState["DataInserted"] != "1")
   {
      ...
      // Add new entry...
      ...
      if(data inserted successfully)
      {
         ViewState["DataInserted"] = "1";
      }
   }
}

編集:

public bool DataInserted
{
    get
    {
        if (HttpContext.Current.Session["DataInserted"] == null)
        {
            HttpContext.Current.Session["DataInserted"] = false;
        }
        bool? dataInserted = HttpContext.Current.Session["DataInserted"] as bool?;

        return dataInserted.Value;
    }
    set
    {
        HttpContext.Current.Session["DataInserted"] = value;
    }
}

...

private void OnbuttonAdd_click()
{
   if(!DataInserted)
   {
      ...
      // Add new entry...
      ...
      if(data inserted successfully)
      {
         DataInserted = true;
      }
   }
}
于 2012-07-16T20:04:17.103 に答える
3

最も簡単な方法は、post/redirect/get パターンを使用することです。

基本的に、ポストを使用したページ ビルドの更新アクションでは、データを再ポストする必要があります。このパターンを使用して、ページ全体をリロードします。

ASP.Net では、単純な代替手段があり、UpdatePanel. これにより、AJAX を使用してページの一部のみが更新されます。ページ自体は引き続き GET リクエストの結果であるため、ページを更新できます。また、ASP.Net を使用すると、統合が非常に簡単になります。

最後に、自家製の AJAX リフレッシュを使用できます。jQuery、KnockOut、および残りのサービス (たとえば) の組み合わせは、ajax 呼び出しの利点として、ページ全体の更新を回避するのに役立ちます。

于 2012-07-16T20:09:12.730 に答える
1

これを行うと、非常に簡単で効果的です

ページ load() で IsPostBack を指定する代わりに、ボタン クリック内に指定してください (データを送信または挿入するため)。

すべての入力値をリセットした後、同じページを再度呼び出します

 protected void Btn_Reg_Click1(object sender, EventArgs e)
    {
        try
        {
            if (IsPostBack)
            {
                Registration_Save();
                Send_Mail();
                txtEmail.Text = "";
                txtname.Text = "";
                Response.Redirect("~/index.aspx");
            }


        }
        catch (Exception) { }

    }

ページを更新した後、サーバー メッセージは表示されません。

于 2013-12-12T13:13:53.937 に答える
1

いくつかの経験があります:

  1. クリック時に [送信] ボタンを無効にします (JavaScript によるクライアント側で)。
  2. サーバー側での保存操作で Session['issaved'] = true を変更し、新しいアクションでそれを false に変更します。
  3. (QueryString の代わりに) RecordId などのパス パラメータにビュー ステートを使用して、ページの更新時にクリアします。私は常にセッションでパラメータを新しいページに渡し、ページの読み込み時に ViewState['aaa']=Session['aaa'] を設定し、セッションをクリアします。

...お役に立てば幸いです...

于 2014-03-02T09:05:35.523 に答える