gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:50:47 28 4
gpt4 key购买 nike

我正在使用 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。例如: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,我将在其中放置我的删除功能以从数据库和 bindgridview 中删除记录:

<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 方法来自父页面,我认为这是不合适的。

所以我想克服这个问题。如何正确配置我的删除功能???

最佳答案

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

因为您的子页面中有 RadAjaxManager,即 ABC.aspx,所以事件 RadAjaxManager2_AjaxRequest 应该放在子页面中,而不是父页面。您已将此事件放在父类中,即 ParentPage 类中。 原因在下面的段落中有详细解释。另外,JavaScript 方法 DeleteData(Id) 不应该在母版页中,而应该在实际的子页中,因为这调用方法以响应单击子页面上的删除按钮。

在面向对象编程中必须遵循的规则之一是,一个类应该只做它应该做的事情,而不应该做其他类负责的事情。在您的情况下,ParentPage 类应该只包含为子类提供基本功能的代码,而不是实际上是子类功能的代码。具体来说,delete 功能是子类而不是父类的责任,因此所有删除功能的代码都应该在子类中,而且 RadAjaxManager 也是子类的一部分,所以所有与 RadAjaxManager 相关的代码,包括事件 RadAjaxManager2_AjaxRequest 都应该在子类中,而不是在父类中。

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

关于c# - 如何使用带确认框的 radajaxmanager 正确配置删除功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35646158/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com