如何使用带有确认框的 radajaxmanager 正确配置删除功能?
Posted
技术标签:
【中文标题】如何使用带有确认框的 radajaxmanager 正确配置删除功能?【英文标题】:How to properly configure delete functionality with radajaxmanager with confirmation box? 【发布时间】:2016-06-09 08:10:14 【问题描述】:我正在使用 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 方法来自父页面,我认为这是不合适的。
所以我想克服这个问题。如何正确配置我的删除功能???
【问题讨论】:
【参考方案1】:您的代码的问题在于您混淆了父类、子类和母版页的代码。如果代码实际上属于子类,则将其放在父类或母版页中,这是一种不好的编程习惯,肯定会导致很多问题和错误。此外,您的代码将非常困难且无法维护。
由于您的子页面中有 RadAjaxManager,即 ABC.aspx
,因此事件 RadAjaxManager2_AjaxRequest 应该放在子页面中而不是父页面中。您已将此事件放置在父类中,即 ParentPage
类中。 The reason for this is explained in detail in paragraph below.
另外,JavaScript 方法 DeleteData(Id) 不应在母版页中,而应在实际子页中,因为该方法是为了响应单击子页上的删除按钮而调用的。
在面向对象编程中必须遵循的规则之一是,一个类应该只做它应该做的事情,而不应该做其他类负责的事情。在您的情况下,ParentPage
类应该只包含为子类提供基本功能的代码,而不是实际上是子类功能的代码。具体来说,delete
功能是子类而不是父类的责任,所以删除功能的所有代码都应该在子类中,并且RadAjaxManager
是子类的一部分,所以所有与RadAjaxManager
相关的代码包括事件 RadAjaxManager2_AjaxRequest 应该在子类中,而不是在父类中。
这样做将允许您在子页面中编写删除功能,而不会违反面向对象编程的原则。这将使您和其他程序员更容易维护您的代码,并且由于您的代码干净且易于遵循,因此您将最大限度地减少错误。
【讨论】:
好的,我同意你的说法,但是因为我的 DeleteData 和 RadAjaxManager2_AjaxRequest 是一样的,所以我应该用同样的代码用这种方法污染我的每一页吗??? 每个子页面都有自己的控件,那么为什么所有子页面的 DeleteData 都一样呢?另外,每个子页面都会根据自己的需求进行ajax请求,那为什么要对所有子页面进行同样的ajax请求呢?您认为所有子页面的一切都是一样的。 另一方面if all child pages have same delete functionality
然后你可以把它放在 ParentPage 类中,因为它可以让你免于重复代码。但是很难相信删除功能在所有网页上都是相同的。我从来没有遇到过这样的场景。
您可以在此 URL 上查看有关如何配置删除功能的答案:***.com/questions/35356677/…以上是关于如何使用带有确认框的 radajaxmanager 正确配置删除功能?的主要内容,如果未能解决你的问题,请参考以下文章
Telerik.WebControls.RadAjaxManager 导致下拉列表不触发处理程序
如何在确认框的取消事件后强制 asp.net 列表框保留选定的值?