2012-01-31 7 views
4

データを表示するために使用するリピータコントロール付きのaspxページがありますが、ユーザーはリピータ内のデータを変更できます。 SAVEボタンが押されるまでデータは保存されません。 また、ページに[UNDO]ボタンがあります。ユーザーがこのボタンをクリックすると、ページをリロードしてユーザーの変更を破棄したい(MS OfficeのUNDO機能に似ている) 初めてページが読み込まれたときに表示されたものと同じデータを表示する必要がある。ボタンをクリックして同じページを再読み込みし、データベースのデータを使用して変更を無視する方法

こんにちは。

ありがとうございました!

答えて

10

ちょうど同じページにリダイレクトされた後のコードに、aspボタンを配置します。

Response.Redirect(Request.RawUrl); 

P.S.投稿を作成するだけの場合、入力コントロールはデータを保持しますので、最初からページをリロードする必要があります。リダイレクトを行わない場合は、コントロールを処理してクリアする必要があります。

サーバにあなたが戻ってポストを避けることができる追加のラウンドトリップをとJavaScriptをJavaScriptコードでOnClientClick="return ReloadPage();"を呼び出すと、クライアント側で同じ操作を行います。

function ReloadPage() 
{ 
    top.location.replace(updateURLParameter(document.location.href, "_rnd", Math.random())); 
    return false; 
} 
// 
// this function is an improved version of 
// http://stackoverflow.com/a/10997390/159270 
// 
function updateURLParameter(url, param, paramVal) 
{ 
    var TheAncor = null; 
    var newAdditionalURL = ""; 
    var tempArray = url.split("?"); 
    var baseURL = tempArray[0]; 
    var additionalURL = tempArray[1]; 
    var temp = ""; 

    if (additionalURL) 
    { 
     var tmpAncor = additionalURL.split("#"); 
     var TheParams = tmpAncor[0]; 
      TheAncor = tmpAncor[1]; 
     if(TheAncor) 
      additionalURL = TheParams; 

     tempArray = additionalURL.split("&"); 

     for (i=0; i<tempArray.length; i++) 
     { 
      if(tempArray[i].split('=')[0] != param) 
      { 
       newAdditionalURL += temp + tempArray[i]; 
       temp = "&"; 
      } 
     }   
    } 
    else 
    { 
     var tmpAncor = baseURL.split("#"); 
     var TheParams = tmpAncor[0]; 
      TheAncor = tmpAncor[1]; 

     if(TheParams) 
      baseURL = TheParams; 
    } 

    if(TheAncor) 
     paramVal += "#" + TheAncor; 

    var rows_txt = temp + "" + param + "=" + paramVal; 
    return baseURL + "?" + newAdditionalURL + rows_txt; 
} 

上記のコードはに乱数を加算していますページのキャッシュを保持しないようにするためにURLが存在する場合は更新してください。あなたがキャッシュ上にページを保持する準備ができているなら、余分なランダムなパラメータを使って同じことをすることができます。

+0

同じページにリダイレクトする必要はありません。クリックハンドラが何もしない場合は、同じページが再読み込みされます。 –

+0

@ george2giga textcontrolがデータを保持するので、必要です。 – Aristos

+0

あなたは正しいです、私は目的地のURLを考えていただけです:) –

0

イベントハンドラにコードなしの送信ボタンを追加するだけで、ページの読み込みが開始され、ページの再読み込み以外の操作は実行されません。

0

私はあなたが私はこれがあなたのアイデアを与える願っていたDataTable使用してViewStateの

protected void Page_Load (object sender, EventArgs e) 
{ 
    if(!isPostBack) 
    { 
     DataTable Dt = new DataTable(); 
     ProcessIt();//I assume you know better how to process your data) 
     ViewState("Tbl") = Dt; 
    } 

} 

protected void BtnSave_Click (object sender, EventArgs e) 
{ 
    SaveIt();//Save your changes first 
    ViewState("Tbl") = Dt;//store back the datatable 

} 

protected void BtnCancel_Click (object sender, EventArgs e) 
{ 
    DataTable Dt = ViewState["tbl"]; 
    GridView.DataSource = Dt; 
    GridView.DataBind(); 
} 

を保存することをお勧め!

+0

ありがとう、私は問題を解決しましたが、あなたのアプローチも良いと思います。私は確かにそれを試してみましょう。ありがとう – Warrior

関連する問題