如何使用带确认框的 radajaxmanager 正确配置删除功能?

How to properly configure delete functionality with radajaxmanager with confirmation box?

我正在使用 Telerik Grid 控件,我在其中显示记录列表以及更新和删除功能。

现在我想在删除记录时显示确认框,以免用户不小心删除记录。

所以这是我的方法:

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) 我已经创建了 1 个父页面,我的所有页面都将从该页面继承,我的 RadAjaxManager2_AjaxRequest 将驻留在该页面上,这样我就不必用这种方法污染我的每个页面,而且这种方法将负责处理我在每个页面上的删除功能:

在这个方法中,我会将删除方法的名称传递给 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) 我的页面 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 方法来自父页面,我认为这是不合适的。

所以我想克服 this.How 以正确配置我的删除功能???

您的代码存在问题,您混淆了 parent class、child class 和母版页的代码。如果代码实际上属于 child class,则您将其放在 parent class 或母版页中,这是一种糟糕的编程习惯,肯定会导致很多问题和错误.此外,您的代码将非常难以维护。

由于您的 child 页面中有 RadAjaxManager,即 ABC.aspx,所以事件 RadAjaxManager2_AjaxRequest 应该放在 child 页而不是 parent 页。您已将此活动放在 parent class 中,即 ParentPage class。 The reason for this is explained in detail in paragraph below. 此外,JavaScript 方法 DeleteData(Id) 不应在母版页中,而应在实际的 child 页面中,因为调用此方法响应点击 child 页面上的删除按钮。

您在 object-oriented 编程中必须遵循的规则之一是 class 应该只做它应该做的事情,而不应该做其他 class 负责的事情为了。在你的情况下,ParentPage class 应该只包含为 child classes 提供基本功能的代码,而不是实际上是 child class。具体来说,delete 功能是 child class 而不是 parent class 的责任,因此删除功能的所有代码都应该在 child 中class,并且 RadAjaxManager 是 child class 的一部分,因此与 RadAjaxManager 相关的所有代码包括事件 RadAjaxManager2_AjaxRequest 应该在 child class 而不是 parent class.

这样做可以让您在child页面中编写删除功能,并且不会违反object-oriented编程的原则。这将使您和其他程序员更容易维护您的代码,并且您还将最大限度地减少错误,因为您的代码将干净且易于遵循。