2016-08-23 4 views
0

このような質問がたくさんあることは知っていますが、全く同じことはありません。私はASPXページを持っていて、javascriptを使って確認ポップアップを表示しています。ボタンをクリックすると、クリックした値は使用されず、以前の値が使用されます。だから、OKをクリックすると、最初にキャンセルされます。 OKを2回クリックするとOKに、キャンセルをクリックするとOKに、キャンセルをもう一度クリックするとキャンセルになります。私はこれがポストバックの問題だと確信していますが、私はボタンのクリックでJavaScriptを呼び出さないので、それを解決する方法はわかりませんが、後で。私は自分のコードを使ってレコードが重複しているかどうかを判断し、そうであればユーザーに知らせるポップアップを表示し、受け入れまたは取り消すオプションを与えます。重複がない場合、ポップアップのスクリプトは呼び出されません。どうすればこの問題を解決できますか?私のASPXポストバックの問題JavaScriptポップアップ

function Confirm() { 
    var confirm_value = document.createElement("INPUT"); 
    confirm_value.type = "hidden"; 
    confirm_value.name = "confirm_value"; 
    if (confirm("Duplicate Record. Do you want to save?")) { 
     confirm_value.value = "Yes"; 
    } else { 
     confirm_value.value = "No"; 
    } 
    document.forms[0].appendChild(confirm_value); 
} 

これで

Javascriptが条件をテストした後メソッドから呼び出され、私のCSからのコードです。

ScriptManager.RegisterStartupScript(this, base.GetType(), "confirmation", "Confirm();", true); 
string confirmValue = Request.Form["confirm_value"]; 
if (confirmValue == "Yes") 
{ 
    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked YES!')", true); 
} 
else 
{ 
    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked NO!')", true); 
} 

注:私は、そのデータ入力フォームと同じページに複数のフィールドのためのAutoPostBackを使用し、一つのフィールドのために選択されているものに応じています別のフィールドが移入されるかに依存します。

+0

RegisterStartupScriptは、サーバー側からhtmlにjsコードを追加するために使用されます。すぐには実行されません。ブラウザでHTMLをレンダリングした後でなければなりません。この時点でconfirm_valueを取得することはできません。 –

答えて

0

これを行う方法の1つです。

マークアップでは、重複したデータを上書きする必要があるかどうかを監視する隠しフィールドを追加できます。下の例では、btnSaveDataはフォームに既に存在するボタンです。

<asp:HiddenField ID="hiddenOverwriteData" runat="server" Value="false" /> 
<asp:Button ID="btnSaveData" runat="server" Text="Save data" OnClick="btnSaveData_OnClick" /> 

ボタンクリックのイベントハンドラは、データが既に存在するかどうかを確認する必要があります。そうであれば、クライアントスクリプトが登録されます。そうでない場合は、新しいデータが保存されます。

protected void btnSaveData_OnClick(object sender, EventArgs e) 
{ 
    // Check if the data record already exists 
    bool isDuplicate = ... 

    if (isDuplicate) 
    { 
     ScriptManager.RegisterStartupScript(this, this.GetType(), "ConfirmSave", "confirmSaveData();", true); 
    } 
    else 
    { 
     DoSaveData(); 
    } 
} 

private void DoSaveData() 
{ 
    // Actually save the data 
    ... 
} 

Javascript機能が確認を求めます。ユーザーが確認すると、非表示フィールドの値はtrueに設定され、フォームが再度送信されます。そうでない場合、保存操作は取り消される。 Page_Load

<script type="text/javascript"> 
    function confirmSaveData() { 
     if (confirm("Duplicate data. Do you want to overwrite?")) { 
      var hiddenOverwriteData = document.getElementById('<%= hiddenOverwriteData.ClientID %>'); 
      hiddenOverwriteData.value = 'true'; 
      form1.submit(); 
     } 
    } 
</script> 

ユーザーは単に重複データは、上書きされるはずのデータが保存されている場合には隠しフィールドの値がリセットされていることを確認した場合、我々は確認してください。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (hiddenOverwriteData.Value == "true") 
    { 
     hiddenOverwriteData.Value = "false"; 
     DoSaveData(); 
    } 
} 
+0

パーフェクト!正確に私が必要としたもの、おかげさまで! – aantiix

関連する問題