2011-07-27 15 views
0

RadConfirmダイアログで[OK]をクリックすると発生するJavaScript関数を記述しました。これは、サーバーへのJavaScriptコールバックをトリガーして、データベースからレコードを削除することになっています。これは最高のアーキテクチャではないかもしれませんが(私は目標を達成するための他の方法を考えることができます)、私はこれを学習の練習として苦労させようとしています。以下はこれまでに書いたコードです。私はそれのほとんどが正しいことを得たと思う。PageMethod経由でサーバーサイドメソッドを呼び出す

このJavaScript関数:

 function confirmCallBackFn(arg) { 

     if (arg == true) { 
      PageMethods.RemovePackagePageMethod(); 
     } 
     else { 
     } 
    } 

は、サーバー上で、次のWebメソッドを呼び出す必要があります。

順番に次のメソッドを実行する必要があり
[WebMethod()] 
public static void RemovePackagePageMethod(object sender, EventArgs e) 
{ 
    Inventory inv = new Inventory(); 
    inv.RemovePackage(); 

} 

private void RemovePackage() 
{ 
    SBMData2.SBMDataContext db = new SBMData2.SBMDataContext(); 

    var boxes = from p in db.Packages 
       where p.PackageID == Convert.ToInt32(RadGrid1.SelectedValues["PackageID"].ToString()) 
       select p; 

    foreach (var box in boxes) 
    { 
     db.Packages.DeleteOnSubmit(box); 
    } 

    try 
    { 
     db.SubmitChanges(); 
     RadGrid1.Rebind(); 
    } 
    catch (Exception ex) 
    { 
     RadWindowManager1.RadAlert("System error deleting package", 200, 200, "exception", null); 

    } 

} 

すべてがよさそうですこのサイトで読んだ投稿と一貫しているようです他のPageMethodを使用してサーバー上のコードを起動する方法について説明します。しかし、それは最終的な方法(私が単独でテストした)で削除を実行することに失敗しています。誰かが私が間違っていた場所にスポットできますか?

答えて

2

あなたはRemovePackage方法でRadGrid1コントロールを使用しようとしているが、あなたは、ウェブメソッドからメソッドを呼び出しているので、Pageクラスのインスタンスが存在しないため、何のRadGrid1コントロールはありません。

クライアントコードから削除するレコードのIDをwebメソッドに送信し、そこからRemovePackageメソッドに送信する必要があります。

また、RadGrid1コントロールを再バインドして、変更をページに表示することはできません。 Webメソッド呼び出しはページ要求ではないため、更新されたグリッドを含むことができるページ応答はありません。クライアントコードのグリッドを更新する必要があります。

+0

ありがとうございます。私はこれを撃つだろう。戻ってください... – hughesdan

+0

あなたは正しいです。ありがとうございました。 +1は、Webメソッドがページクラスのインスタンスを持たないことを理解するのに役立ちます。私はRadAlertをクライアント側にも再配置する必要があると思います。 – hughesdan

1

Privateの代わりにRemovePackageメソッドをPublic(Friendも動作する可能性があります)にしてから、試してみてください。

+0

これは機能しませんでした。ところで、RemovePackageは同じコードビハインドファイルに表示されるので、privateはOK(私は思う)でなければなりません。 – hughesdan

関連する問題