2016-01-08 2 views
0

Я новый разработчик ASP.NET Web Forms, и я пытаюсь разработать простое приложение с использованием ObjectDataSource с шаблоном репозитория. Сейчас я борюсь с двумя проблемами, связанными с ASP.NET LinkButton внутри элемента управления GridView ASP.NET. Проблемы связаны с событием клика Delete LinkButton, который находится внутри GridView.Как пролить сообщение на событие click ASP.NET LinkButton, находящееся внутри ASP.NET GridView?

Вот мой ASP.NET Код:

<asp:UpdatePanel ID="upView" runat="server" UpdateMode="Conditional"> 
       <ContentTemplate> 
<asp:Label ID="lblMessage" runat="server" Text="" CssClass="lead text-info"></asp:Label> 
         <asp:GridView ID="gvProducts" runat="server" AutoGenerateColumns="false" 
          DataSourceID="odsProduct" DataKeyNames="Id" 
          CssClass="table table-bordered table-striped"> 
          <Columns> 
           <asp:TemplateField ShowHeader="False"> 
            <ItemTemplate> 
             <asp:LinkButton ID="lbtnEdit" 
              runat="server" 
              CssClass="btn btn-info btn-sm" 
              CommandName="Edit" 
              Text="Edit" /> 
            </ItemTemplate> 
            <EditItemTemplate> 
             <asp:LinkButton ID="lbtnUpdate" 
              runat="server" 
              CssClass="btn btn-success btn-sm" 
              CommandName="Update" 
              Text="Update" /> 
             <%--&nbsp;--%> 
             <asp:LinkButton ID="lbtnCancel" 
              runat="server" 
              CssClass="btn btn-default btn-sm" 
              CommandName="Cancel" 
              Text="Cancel" /> 
            </EditItemTemplate> 
           </asp:TemplateField> 
           <asp:TemplateField> 
            <ItemTemplate> 
             <span onclick="return confirm('Are you certain you want to delete this 
               product?');"> 
              <asp:LinkButton ID="lbtnDelete" runat="server" 
               CssClass="btn btn-danger btn-sm" 
               CommandName="Delete"> 
              <span class="glyphicon glyphicon-trash"></span> Delete 
              </asp:LinkButton> 
             </span> 
            </ItemTemplate> 
           </asp:TemplateField> 
           <asp:BoundField DataField="Id" HeaderText="Id" SortExpression="Id" ItemStyle-VerticalAlign="Top" /> 
           <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" ItemStyle-VerticalAlign="Top" /> 
           <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" ItemStyle-VerticalAlign="Top" /> 
           <asp:BoundField DataField="UnitPrice" HeaderText="Unit Price" SortExpression="UnitPrice" /> 
          </Columns> 
         </asp:GridView> 
         <asp:ObjectDataSource ID="odsProduct" runat="server" 
          TypeName="ThinkSafetyFirst_DatabaseFirst.BLL.ProductBL" 
          DataObjectTypeName="ThinkSafetyFirst_DatabaseFirst.Models.TTSF_Product" 
          SelectMethod="GetProducts" 
          DeleteMethod="DeleteProduct" 
          UpdateMethod="UpdateProduct"> 
         </asp:ObjectDataSource> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
  1. Я хотел бы показать сообщение Javascript оповещения, как только пользователь нажимает на кнопку Delete. Код есть, как показано выше, но сообщение не появляется, когда пользователь нажимает кнопку, и я не знаю почему.

  2. Функция удаления работает хорошо, но я хотел бы показать сообщение об успешном провале элемента управления меткой ASP.NET, который находится за пределами элемента управления GridView.

Не могли бы вы рассказать мне, как я могу исправить эти два вопроса?

UPDATE:

Как вы можете увидеть в моем коде ASP.NET, я использую ObjectDataSource с Repository Pattern. А вот C# код бизнес-логики для модели продукта:

public void DeleteProduct(TTSF_Product product) 
     { 
      try 
      { 
       productRepository.DeleteProduct(product); 
      } 
      catch (Exception ex) 
      { 
       //Include catch blocks for specific exceptions first, 
       //and handle or log the error as appropriate in each. 
       //Include a generic catch block like this one last. 
       throw ex; 
      } 
     } 

Так как я могу быть в состоянии отобразить сообщение от метода удаления? Обратите внимание, что элемент управления Label ASP.NET находится вне элемента управления GridView.

Спасибо за вашу помощь заранее.

+0

Удалить Аякса UpdatePanel. Вы можете добавить onClientClick = "return confirm (« Удалить? »); на вашу ссылку, чтобы убедиться, что пользователь действительно хочет удалить. – Kami

ответ

2

Для подтверждения в GridView вы можете использовать Javascript Confirm и вызвать клиентский скрипт, используя событие OnClientClick. Вы можете удалить элемент span. Код для itemtemplate должен выглядеть примерно так.

OnClientClick Получает или задает скрипт на стороне клиента, который выполняется при активации события Click Button Button.

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:LinkButton ID="lbtnDelete" runat="server" OnClientClick="return confirm('Are you sure you want to delete this Product?');" 
      CssClass="btn btn-danger btn-sm" CommandName="Delete"> 
     <span class="glyphicon glyphicon-trash"></span>Delete</asp:LinkButton> 
    </ItemTemplate> 
</asp:TemplateField> 

Для отображения сообщения об ошибке успеха неудачи на элемент управления ASP.NET Лейбл, который находится вне контроля GridView. Вы можете использовать событие GridView RowCommand.

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
     { 
      if (e.CommandName == "Delete") 
      { 
       if (success) { lblResult.Text = "Success"; } 
       else { lblResult.Text = "Failure"; } 
      } 
     } 

EDIT 2: Обновление Показаны сообщения. Неважно, если вы используете шаблон хранилища, вам просто нужно поместить код для метки на DeleteProduct Метод. Измененный код метода DeleteProduct, замените LabelControlID с фактическим идентификатором для управления метками.

public void DeleteProduct(TTSF_Product product) 
     { 
      try 
      { 
       productRepository.DeleteProduct(product); 
       LabelControlID.Text = "Success"; 
      } 
      catch (Exception ex) 
      { 
       //Include catch blocks for specific exceptions first, 
       //and handle or log the error as appropriate in each. 
       //Include a generic catch block like this one last. 
       LabelControlID.Text = "Failure"; 
       throw ex; 
      } 
     } 
+0

благодарит за вашу помощь. Я очень ценю это. У меня есть один главный вопрос. В 'GridView RowCommand Event', что вы подразумеваете под' if (success) '? Моя проблема заключается в том, как определить, что метод вставки или удаления с использованием объекта ObjectDataSource потерпел неудачу или нет. – user3107976

+0

Если (успех) является просто кодом psuedo, вы можете заменить свой код здесь для получения результата. Я отредактирую свой ответ для получения более подробной информации. – Agalo

+0

за вашу помощь снова. Не могли бы вы взглянуть на мой обновленный вопрос? Я попытался сделать то, что вы объяснили мне в своем вопросе, но кажется, что это не сработало, поскольку я использую шаблон хранилища с ObjectDataSource. – user3107976

1

Обрабатывать событие YourOjbectDataSource_Selected.

В репозитории:

 if (error) 
     { 
      throw new YourException(ErrorMessage); 
     } 

В вашем ASPX:

protected void YourOjbectDataSource_Selected(object sender, ObjectDataSourceStatusEventArgs e) 
    { 
     if (e.Exception != null) 
     { 
      if (e.Exception.InnerException is YourException) 
      { 
       e.ExceptionHandled = true; 
       lblErrorMessage.Text = e.Exception.InnerException.Message; 
      } 
     } 
    }