2016-02-26 4 views
2

Я использую элемент управления сетью Telerik, в котором я показываю список записей вместе с функцией обновления и удаления.Как правильно настроить функцию удаления с помощью radajaxmanager с полем подтверждения?

Теперь я хочу показать окно подтверждения при удалении записей, чтобы пользователь случайно не удалил запись.

Так вот мой подход:

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.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. 
        } 
       } 
      } 

все это работает идеально, но проблема в том, как мы все знаем, что, когда мы наследуем дочернюю страницу из родительской страницы, то мы называем родительский метод страницы из метода ребенка страницы, но вот в моем случае это противоположно e, то есть я вызываю мой метод RemoveRecord с родительской страницы, и это я считаю неуместным.

Так что я хочу преодолеть это. Как правильно настроить мою функцию удаления ???

ответ

1

Проблема с кодом заключается в том, что вы смешиваете код для родительского класса, дочернего класса и главной страницы. Если код действительно принадлежит к дочернему классу, вы помещаете его в родительский класс или главную страницу, что является плохой практикой программирования и, безусловно, вызовет массу проблем и ошибок. Кроме того, ваш код будет очень сложным и невозможным для поддержания.

Поскольку у вас есть RadAjaxManager в вашей детской страницы т.е. ABC.aspx, поэтому событие RadAjaxManager2_AjaxRequest должны быть размещены в детской страницы, а не на родительской странице. Вы разместили это событие в родительском классе, то есть в классе ParentPage. The reason for this is explained in detail in paragraph below. Кроме того, метод JavaScript DeleteData (Id) не должен находиться на главной странице, а на фактической дочерней странице, так как этот метод вызывается в ответ на нажатие кнопки удаления на дочерней странице.

Одно из правил, которым вы должны следовать в объектно-ориентированном программировании, состоит в том, что класс должен выполнять только то, что он должен делать, и не должен выполнять то, за что отвечают другие классы. В вашем случае класс ParentPage должен содержать только код, который обеспечивает базовую функциональность для дочерних классов, а не код, который на самом деле является функциональностью дочернего класса.В частности, функциональность delete является ответственностью дочернего класса, а не родительского класса, поэтому весь код для функции удаления должен быть в классе child, а также RadAjaxManager является частью дочернего класса, поэтому весь код, связанный с RadAjaxManager, включая событие RadAjaxManager2_AjaxRequest должен быть в классе child, а не в родительском классе.

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

+0

ОК, я согласен с тем, что вы говорите, но поскольку мои DeleteData и RadAjaxManager2_AjaxRequest были бы такими же, поэтому я должен загрязнять каждую страницу этим методом одним и тем же кодом ??? –

+0

Каждая дочерняя страница будет иметь свои собственные элементы управления, так почему бы DeleteData быть одинаковым для всех дочерних страниц? Кроме того, каждая дочерняя страница будет выполнять запрос ajax в соответствии со своими собственными требованиями, так почему же должен быть выполнен один и тот же запрос ajax для всей дочерней страницы? Вы думаете, что все одинаково для всех дочерних страниц. – Sunil

+0

С другой стороны, 'если все дочерние страницы имеют одинаковые функции удаления ', вы можете поместить это в класс ParentPage, так как это избавит вас от повторения кода. Но трудно поверить, что функциональность удаления будет одинаковой для всех веб-страниц. Я никогда не сталкивался с таким сценарием. – Sunil