Как правильно настроить функцию удаления с помощью radajaxmanager с окном подтверждения?
Я использую Telerik Grid control, в котором я отображаю список записей вместе с функциями обновления и удаления.
Теперь я хочу показать окно подтверждения при удалении записей, чтобы пользователь случайно не удалил запись.
Итак, вот мой подход:
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) Я создал 1 родительскую страницу, от которой будут наследоваться все мои страницы, и на этой странице мой RadAjaxManager2_AjaxRequest
будет размещаться так, чтобы мне не приходилось загрязнять каждую мою страницу этим методом, и этот метод будет отвечать за обработку моей функции удаления на каждой странице:
В этом методе я передам имя моего метода удаления в огонь. Например: 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 должно быть в дочернем классе, а не в родительском классе.
Это позволит вам написать функциональность удаления на дочерней странице и не нарушать принципы объектно-ориентированного программирования. Это позволит вам и другим программистам легко поддерживать ваш код, а также минимизировать количество ошибок, так как ваш код будет чистым и простым в использовании.