Как правильно настроить функцию удаления с помощью 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 должно быть в дочернем классе, а не в родительском классе.

Это позволит вам написать функциональность удаления на дочерней странице и не нарушать принципы объектно-ориентированного программирования. Это позволит вам и другим программистам легко поддерживать ваш код, а также минимизировать количество ошибок, так как ваш код будет чистым и простым в использовании.

Другие вопросы по тегам