2011-10-06 14 views
1

これを実装する方法を見てきました。ここで私が持っているものの擬似コード表現である:asp.netコードの条件付き確認プロンプト

bool hasData = ItemHasData(itemid); 
Confirm = "false"; // hidden variable 

if (hasData) 
{ 
    //Code to call confirm(message) returns "true" or "false" 
    if (Confirm == "true") 
    { 
     //Delete item 
    } 
    else if (Confirm == "false") 
    { 
     return; 
    } 
} 

確認を呼び出すコードは、ASP使用しています:Literalコントロールをして確認することが等しく設定されます。私はポップアップを得ることができますが、関数が終了した後でなければなりません。それ以降の条件では何もしません。

一般的なコンセンサスは、特定の行でJavaScriptを呼び出すことは不可能です(サーバー側とクライアント側のギャップのために意味をなさない)が、これをどのように達成できますか?私はASP.NET AJAX ToolkitからConfirmButtonExtenderを使用してみましたが、オブジェクトがrunat = "server"に設定されていると、コードの背後にあるconfirmbuttonextenderオブジェクトと対話できませんでした。

編集:

申し訳ありませんが、私はそれらのおしゃべりを見逃しました。ありがとうイカルス。

コントロール自体はGridView(擬似バージョンは実際にはgvData_RowCommand関数のものです)のrowcommandです。最初のチェックでは、CommandNameがDeleteItemかどうかを確認し、そうであればこれを調べます。

gvDataの列は、必要な情報が異なる複数の項目を対象にしているため、渡されたヘッダー(およびデータセット)のリストに基づいて設定されます。 gvDataのデータはそこにあります。データがあるときにアイテムを削除するかどうかを確認するYes/No(または実際にはOk/Cancelになります)ダイアログを取得するだけです。

+1

私たちは、どのような種類のコントロールについて、どのようにデータをバインドしているのかわからなくても、サンプルコードを提供するのが難しいです。 – Icarus

+1

私は、例えば、 [ModalPopup](http://www.asp.net/ajaxlibrary/AjaxControlToolkitSampleSite/modalpopup/modalpopup.aspx)をConfirmBoxとして使用し、コードビハインド( 'Show')から可視化し、関数を終了し、ポップアップのイベントを処理して何でもあなたはユーザーがそこで選択したものに従って必要とします。 –

答えて

3

最終的には、[確認/キャンセル]ボタンが表示されたパネルを使用する方法があります。これにより、JavaScriptイベントを処理する必要がなくなり、ASP.NETが完全に使用されます。私はパネル

protected void gvData_RowDeleting(object sender, GridViewDeleteEventArgs e) 
{ 
    // Show confirmation dialog 
    pDeleteConfirm.Visible = true; 

    // Select the row to delete 
    gvData.SelectedIndex = e.RowIndex; 

    // Cancel the delete so the user can use the confirm box 
    e.Cancel = true; 
} 

これはJavaScriptのではなく、あなたがするいくつかUpdatePanel秒に追加することができますClickイベント

protected void btDelete_Click(object sender, EventArgs e) 
{ 
    Button bt = (Button)sender; 
    switch (bt.ID) 
    { 
     case "btDeleteYes": // they confirmed a delete 
      sqlData.Delete(); 
      break; 

     case "btDeleteNo": // they clicked cancel 
      // Do nothing 
      break; 

     default: 
      throw new Exception("Unknow button click in btDelete_Click"); 
    } 
    // clear selection and hide the confirm box 
    gvData.SelectedIndex = -1; 
    pDeleteConfirm.Visible = false; 
} 

ボタンを取り扱って表示するように​​イベントを使用

<asp:Panel ID="pDeleteConfirm" runat="server" 
    CssClass="AlertDialog" 
    Visible="False"> 
    <p>Do you wish to delete the selected record?<br /> 
    <asp:Button ID="btDeleteYes" runat="server" OnClick="btDelete_Click" Text="Delete" /> 
    <asp:Button ID="btDeleteNo" runat="server" OnClick="btDelete_Click" Text="Cancel" /> 
    </p> 
</asp:Panel> 

<asp:GridView ID="gvData" runat="server" 
    AutoGenerateColumns="False" 
    CssClass="GridView" 
    DataKeyNames="ID" 
    DataSourceID="sqlData" 
    EmptyDataText="There is no data entered in the system." 
    OnRowDeleting="gvData_RowDeleting"> 
    ...... 
</asp:GridView> 

AJAXはそれに取り組んでいます。

JavaScript処理ではなく、ASP.NETを使用して1つの方法で処理できます。

+0

私はこれを実装しようとしていますが、これはやり方が終わるように思われます。私はそれが適切に処理することができる場合は、正しいとマークします。 – Robert

1

コードビハインドの仕事は、HTMLをブラウザに出力することです。これが行われ、ソケットが閉じられ、サーバー側のコードがもう実行されなくなります。

このロジックは、クライアント側でJavascript関数を使用して実装する必要があります。

特定の操作を行う前にデータが読み込まれている場合、ユーザーに警告しようとしていますか?あるいは、彼らがページを離れようとする前に?そのアクションがページ上で発生すると、スクリプトを使用してアラートをポップアップする必要があります。