2010-02-26 4 views
1

Étant donné que l'échafaudage automatique des pages Web dynamiques de données ASP.NET fait la plupart des choses que je dois faire pour ce projet, je voudrais l'utiliser comme une base.Comprendre le lien de suppression dans les échafaudages de données dynamiques ASP.NET

Maintenant, j'aime ajouter un autre lien au "Modifier" "Supprimer" "Détails" trio sur ma vue de table personnalisée. Je voudrais qu'il se comporte comme le bouton "Supprimer", c'est-à-dire n'appelle pas une autre page, mais fasse quelque chose en arrière-plan (ici: Envoyer un email.) Puis rafraîchit la vue. Hélas, je n'arrive pas à comprendre comment fonctionne ce lien "Supprimer".

Il est défini dans le code généré automatiquement

<asp:LinkButton ID="DeleteLinkButton" 
    runat="server" CommandName="Delete" 
    CausesValidation="false" Text="Delete" 
    OnClientClick='return confirm("Are you sure you want to delete this item?");'/> 

Qu'est-ce qui se passe exactement ici? Y a-t-il une méthode dans le code appelée "Delete" (comme utilisée dans la propriété CommandName)? Quels arguments sont passés là? Et: Comment j'appellerais une méthode personnalisée? J'ai essayé de le parcourir en utilisant le débogueur, mais il est facile de se perdre dans les Dataclasses LINQ, donc je n'ai rien trouvé.

Merci d'avance!

Répondre

2

La suppression CommandName est cravates normalement à un DeleteCommand équivalent sur la même page sous l'étiquette de source de données, par exemple:

<asp:SqlDataSource ID="SqlDataSourcePending" runat="server" 
     ConnectionString="<%$ ConnectionStrings:ConnectionStringPending %>" 
     DeleteCommand="DELETE FROM [CSNTable] WHERE [ID] = @ID" 
     InsertCommand="INSERT INTO [CSNTable] ([CSNDate], [CSNStatus], [CSNAuthor], [CSNSubject], [CSNMessage]) VALUES (@CSNDate, @CSNStatus, @CSNAuthor, @CSNSubject, @CSNMessage)" 
     SelectCommand="SELECT ID, CSNDate, CSNStatus, CSNAuthor, CSNSubject, CSNMessage FROM CSNTable WHERE (CSNStatus LIKE 'Pending')" 
     UpdateCommand="UPDATE [CSNTable] SET [CSNDate] = @CSNDate, [CSNStatus] = @CSNStatus, [CSNAuthor] = @CSNAuthor, [CSNSubject] = @CSNSubject, [CSNMessage] = @CSNMessage WHERE [ID] = @ID"> 
     <DeleteParameters> 
      <asp:Parameter Name="ID" Type="Int16" /> 
     </DeleteParameters> 
     <UpdateParameters> 
      .........etc... 

Vous pouvez configurer la commande de suppression via la propriété de contrôle de la source de données, ou via la page.

En ce qui concerne une nouvelle commande, la manière habituelle est d'ajouter un nouveau bouton de liaison, changez le nom de la commande en quelque chose de logique pour ce que vous voulez faire CommandName="EmailNotice". Puis attrapez ce bouton cliquez sur le nom de commande dans l'événement {YourDataTableName} _ItemCommand en évaluant le eventargs.CommandName (e.CommandName), ce qui est très général puisque je ne sais pas de quoi est composée votre table de données personnalisée. Lorsque e.CommandName == "EmailNotice", alors vous faites ce dont vous avez besoin.

EDIT: Linq est un peu différent! Vous pouvez vous référer à this MSDN article, mais l'essentiel est d'utiliser la méthode GetCommand

+0

Merci pour l'indice! Mon DataSource est un LinqDataSource ... c'est peut-être là que la magie se cache. – Jens

+0

Juste mis à jour la réponse principale avec plus d'informations depuis que je sais que vous utilisez Linq maintenant – curtisk