2017-01-18 7 views
1

私には4つのドロップダウンコントロールがあるページがあります。選択に基づいて、グリッドの各行にテキストボックスを持つデータグリッドを表示します。私は各コントロールのユーザーからの入力を受け取り、保存をクリックするとデータベースに保存されます。未保存の変更が存在する場合にDropDownListの選択を防止します

問題:

私はページ上の未保存の変更があった場合にユーザーに警告するのに苦労だし、彼らはグリッド上のデータの異なるセットを示すことになるドロップダウン値を変更してみてください。

私は、ページ上の変更があった

<asp:HiddenField ID="hfSaveFlag" runat="server" Value="false" ClientIDMode="Static" /> 

をキャプチャ隠しフィールドを持っている私は変更があるたびに、私はtrueに、この隠しフィールドフラグを有効にするテキストボックスの変更機能を有効にしています。

<asp:TextBox ID="txtRating" runat="server" Text='<%# Eval("rating") %>' Width="25" 
      ValidationGroup="rating" onchange="setPendingSaveFlag()" /> 

function setPendingSaveFlag(ctrl) { 
    $("#hfSaveFlag").val('true'); 
} 

これは、これまで正常に動作し、値がテキストボックスの値の変化に応じtrueに設定されています。私は私の意図があればあるこののonchange

function verifyPendingSave(ctrl) { 
    if ($("#hfSaveFlag").val() == 'true') { 
     alert('You have pending changes on the page.'); 
     return false; 
    } else { 
     __doPostback(ctrl, ''); 
     return true; 
    } 
} 

ため

ddlRFP.Attributes.Add("onchange", "verifyPendingSave(this);"); 

私のjavascriptのコードビハインドでのonchangeイベントを追加

<asp:DropDownList ID="ddlRFP" Width="250" runat="server" AutoPostBack="true" 
        OnSelectedIndexChanged="ddlRFP_SelectedIndexChanged" /> 

:以下のように

さて、私のドロップダウンリストがあります隠しフラグの値はtrueです。私は警告を表示し、ポストバックを抑制し、値を前もって選択します。選択された。 falseの場合はポストバックを実行します。

私は警告を見ますが、私はfalseを返すがポストバックを止めていません。

私の他の部分は決してpostbackです。私はコントロールのIDとこの部分の実際のコントロールを参照してくださいが、それはグリッドビューの中にあるので、postbackにも見つけることができないかもしれないと思います。どういうわけか私は何かがとても些細なことを逃していると確信しています。

else { 
    alert(ctrl.id); 
    var control = document.getElementById(ctrl.id); 
    __doPostback(control, ''); 
    return true; 
} 
+0

に役立ちます願っています。 – arbitrarystringofletters

+0

私は静かに確信していませんが、この 'ddlRFP.Attributes.Add( "onchange"、 "return verifyPendingSave(this);";) – Curiousdev

+0

@Curiousdev - あなたが行く!それは働いているように見えます。しかし、選択された値は元の値に戻っていません。変更された値がビューでもリセットされることを確認する方法を教えてください。 – techspider

答えて

1

リターンで、__doPostBackがヒットすることはありませんのでちょうどこの

のようなドロップダウンに呼ばれるjavascriptの

function verifyPendingSave(ctrl) { 
      if ($("#hfSaveFlag").val() == 'true') { 
       alert('You have pending changes on the page.'); 
       return false; 
      } 
       return true; 
     } 

とあなたのonchange関数から他の部分を削除したコードの下に見つけてください。

onchange="if(!verifyPendingSave()) return false;" 

私は、これは私がこれが `にrunat =「サーバー」のAutoPostBackドロップダウンリストの宣言に` =「真」によって引き起こされると考え

+0

本当に間違いはありません。出来た。ただし、ドロップダウンで選択した値は元の値に戻っていません。アラートが来たときにポストバックは起こっていませんが、それでも値は新しい値に設定されます。私は何とかjavascriptで古い値を取り込み、それが選択を変更しなかったように見えるように再割り当てする必要がありますか? – techspider

+0

@techspiderオハイオ州のごめんなさい申し訳ありません私はちょうどあなたもコメントで尋ねたあなたの質問を失った、はいはいいくつかの隠されたフィールドまたは参照のためのフライで前の値を保存する必要があります[このフィドル](http://jsfiddle.net/x5PKf/2458 /)ここではフォーカスメソッドに私たちは以前の値をフライで設定し、falseを返した場合、値をリセットするためにjQueryの変更を書き込んだり、ポストバックのためにjavascript onchangeを両方実行すると、その値をドロップダウンに設定します – Curiousdev

+0

?もしそうなら、実行命令がありますか? – techspider

関連する問題