我正在使用Telerik Grid控件,在该控件中,我将显示记录列表以及更新和删除功能。
现在,我希望在删除记录时显示确认框,这样用户就不会意外地删除记录。
所以我的方法是:
1)我有一个母版页,即MyMaster.Master,它包含一个用于确认框的常见客户端事件,为此我将使用甜警报:
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将驻留,这样我就不必用这种方法污染我的每一个页面,并且这个方法将负责处理我在每个页面上的删除功能:
在此方法中,我将将删除方法的名称传递给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,我将在其中放置删除功能,以便从数据库和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方法,也就是说,我认为这是不合适的。
因此,我想克服this.How,以正确配置我的删除功能?
发布于 2016-02-26 13:19:58
代码的问题在于您混淆了父类、子类和母版页的代码。如果代码实际上属于子类,则将其放入父类或母版页中,这是一种糟糕的编程实践,肯定会导致许多问题和错误。此外,您的代码将非常困难和不可能维护。
因为您的子页面中有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 )都应该在子类中,而不是在父类中。
这样做将允许您在子页面中编写删除功能,并且不会违反面向对象编程的原则。这将使您和其他程序员更容易维护您的代码,而且您还将尽量减少bug,因为您的代码将是干净的和易于遵循的。
https://stackoverflow.com/questions/35646158
复制相似问题