2

更新および削除機能とともにレコードのリストを表示している Telerik Grid コントロールを使用しています。

ユーザーが誤ってレコードを削除しないように、レコードを削除するときに確認ボックスを表示したいと思います。

だからここに私のアプローチがあります:

1)マスターページが1つあります。つまり、確認ボックス用の共通のクライアント側イベントが1つ含まれているMyMaster.Masterです。これにはsweetalertを使用します。

function DeleteData(Id) {
   var ajaxManager = null;
   var action = 'Remove';
   ajaxManager = $find("ctl00_cphMain_RadAjaxManager2");
   var arg = action + "," + Id; //Remove,1(1 indicates id of record to remove from grid)
   ajaxManager.ajaxRequest(arg);This line will fire below method.
  }

2)すべてのページが継承され、このページにRadAjaxManager2_AjaxRequest存在する親ページを1つ作成しました。これにより、このメソッドですべてのページを汚染する必要がなくなり、このメソッドはすべてのページで削除機能を処理する責任があります。 :

このメソッドでは、delete メソッドの名前を fire.For に渡します。例: Remove1

public class ParentPage : RadAjaxPage
{
    protected void RadAjaxManager2_AjaxRequest(object sender, AjaxRequestEventArgs e)
    {
     var stringArray = e.Argument.Split(",".ToCharArray());//[0]="Remove1",[1]=id of record to delete
     RemoveRecord( stringArray[0], stringArray[1]);
     }
}

3)データベースとbindgridviewからレコードを削除する削除機能を配置するAbc.aspxのマイページ:

<telerik:RadAjaxManager ID="RadAjaxManager2" runat="server" OnAjaxRequest="RadAjaxManager2_AjaxRequest">
                <AjaxSettings>
                    <telerik:AjaxSetting AjaxControlID="RadAjaxManager2">
                        <UpdatedControls>
                            <telerik:AjaxUpdatedControl ControlID="Grid1" />
                        </UpdatedControls>
                    </telerik:AjaxSetting>
                </AjaxSettings>
            </telerik:RadAjaxManager>
    <ItemTemplate>
      <asp:ImageButton runat="server" ID="Remove1" Text="Delete" OnClientClick='<%# Eval("Id", "javascript:return DeleteData(\"{0}\");") %>' />
      </ItemTemplate>
         public partial class Abc : ParentPage
            {
               protected void Page_Load(object sender, EventArgs e)
                {
                }
                private void RemoveRecord( buttonId, recordId) 
                {
                   if(buttonId== "Remove1")
                   {
                      //code to delete record with id of recordId
                      //Bind grid view again to display latest records after performing deletion.
                   }   
                }
            }

これはすべて完璧に機能していますが、問題は、親ページから子ページを継承するときに、子ページメソッドから親ページメソッドを呼び出すことを知っているためですが、私の場合、これは反対であり、親からRemoveRecordメソッドを呼び出していますページであり、それは不適切だと思います。

だから私はこれを克服したい.削除機能を適切に設定するには???

4

1 に答える 1

1

コードの問題は、親クラス、子クラス、およびマスター ページのコードを混同していることです。コードが実際に子クラスに属している場合、それを親クラスまたはマスター ページに配置することになります。これはプログラミングの不適切な方法であり、間違いなく多くの問題やバグの原因となります。また、コードの保守が非常に困難で不可能になります。

子ページにRadAjaxManagerABC.aspxあるため、イベントRadAjaxManager2_AjaxRequestは親ページではなく子ページに配置する必要があります。このイベントを親クラス、つまりクラスに配置しました ParentPageThe reason for this is explained in detail in paragraph below.また、JavaScript メソッドDeleteData(Id)は、マスター ページではなく、実際の子ページにある必要があります。このメソッドは、子ページの削除ボタンをクリックすると呼び出されるためです。

オブジェクト指向プログラミングで従わなければならない規則の 1 つは、クラスは本来の役割だけを実行し、他のクラスが担当していることを実行してはならないということです。あなたの場合、ParentPageクラスには、実際に子クラスの機能であるコードではなく、子クラスの基本機能を提供するコードのみを含める必要があります。具体的に言えば、delete機能は親クラスではなく子クラスの責任であるため、削除機能のすべてのコードは子クラスにある必要があり、子クラスの一部でもあるため、イベントRadAjaxManager2_AjaxRequestRadAjaxManagerを含めることに関連するすべてのコードは 子クラスにある必要があり、親クラスにはありません。RadAjaxManager

これを行うと、子ページに削除機能を記述でき、オブジェクト指向プログラミングの原則に違反しなくなります。これにより、あなたや他のプログラマーがコードを簡単に保守できるようになります。また、コードがクリーンで理解しやすいため、バグを最小限に抑えることができます。

于 2016-02-26T13:19:58.443 に答える