2010-10-06 14 views
0

J'ai un formulaire où les utilisateurs peuvent s'abonner et se désinscrire à ma liste d'email. jusqu'à présent, j'ai le bouton d'abonnement fonctionne bien "ajouter membre" fonction. Maintenant, j'ai besoin d'aide avec ma fonction "supprimer un membre" (bouton de désabonnement). Cela permettra à l'utilisateur de supprimer son enregistrement de la base de données. Lorsque je cours le code et clique sur le bouton "désabonnement", je ne peux pas obtenir la logique correcte afin qu'elle efface le dossier de l'utilisateur s'il existe. Merci de votre aide!Delete enregistrement onClick, asp.net

est ici le code j'utilise pour l'abonnement et de désabonnement boutons -----------

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 


    public partial class joinmailinglist : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void addMember(object sender, EventArgs e) 
     { 
      // here you are defining the classes for the database and the linq 
      mailinglistClassDataContext Class = new mailinglistClassDataContext(); 
      mailinglistMember member = new mailinglistMember(); 

      // Now we are going to add the data to the member 
      // Here we are going to let the system define a GUID for the unique user ID 
      member.memberID = new Guid(); 

      // here we are going to capture the user inputs and we are going to set these to lower case especially the email so that we can do a proper comparison later. 
      member.fname = txtFirstName.Text; 
      member.lname = txtLastName.Text; 
      member.email = txtEmail.Text; 

      // Here we are going to create the URL so we can later remove the user if they decide to opt out. 
      member.removeurl = "http://removeuser.aspx?code=" + member.memberID.ToString(); 

      // Here we are going to use a LINQ query to search the class of mailinglistmembers for any emails that contain equal values of the text field and select it. 
      var duplicatecheck = from emails in Class.mailinglistMembers 
           where emails.email.Contains(txtEmail.Text) 
           select emails; 

      // Here we are going to check that the count of duplicate is equal to zero. If so then we are going to insert the member information into the class and then submit the changes to the database. 
      if (duplicatecheck.Count() == 0) 
      { 
       Class.mailinglistMembers.InsertOnSubmit(member); 
       Class.SubmitChanges(); 

      } 
      else 
      { 
       lblDuplicate.Text = "Hey you have already entered your information."; 
      } 
     } 


protected void deleteMember(object sender, EventArgs e) 
    { 



     // here you are defining the classes for the database and the linq 
     mailingListClassDataContext Class = new mailingListClassDataContext(); 
     mailinglistMember member = new mailinglistMember(); 



     // here we are going to capture the user inputs and we are going to set these to lower case especially the email so that we can do a proper comparison later. 

     member.email = txtEmail.Text; 


     // Here we are going to use a LINQ query to search the class of mailinglistmembers for any emails that contain equal values of the text field and select it. 

         var deleterec = from emails in Class.mailinglistMembers 
         where emails.email.Contains(txtEmail.Text) 
          select emails; 

     // Here we check if the record exisits 

     if (deleterec.Count() == 0) 
     { 
      Class.mailinglistMembers.DeleteOnSubmit(member); 
      Class.SubmitChanges(); 
      Response.Redirect("frm_confirmation.aspx"); 

     } 
     else 
     { 
      lblDelete.Text = "No record exsists!"; 
     } 
    } 
} 

Répondre

0

Essayez le code ci-dessous.

string mailAddress = txtEmail.Text.Trim().ToLower(); 

using (var db = new mailingListClassDataContext()) 
{ 
    var records = from e in db.mailinglistMembers 
        where e.mail == mailAddress 
        select e; 

    if (records != null) 
    { 
     db.mailinglistMembers.DeleteAllOnSubmit(records); 
     db.SubmitChanges(); 
     Response.Redirect("frm_confirmation.aspx"); 
     Response.End(); 
    } 
    else 
    { 
     lblDelete.Text = "No records exists!"; 
    } 
} 
+0

lorsque j'ai couru cela, je peux une erreur sur db.SubmitChanges(); indiquant "séquence contient plus d'un élément":/ – PW2

+0

@ PW2: Cela signifie que vous avez des entrées en double dans 'mailinglistMembers'. J'ai apporté quelques modifications au code pour en tenir compte. – sshow

+0

J'ai appliqué ce code et j'ai eu la même erreur. les e-mails de la liste sont uniques. donc c'est étrange que ça me donne cette erreur. – PW2

0

Vous avez peut-être destinés à faire:

    var deleterec = Class.mailinglistMembers 
        .FirstOrDefault(emails => emails.email.Contains(txtEmail.Text)); 

    if (deleterec != null) 
    { 
     Class.mailinglistMembers.DeleteOnSubmit(deleterec); 
     Class.SubmitChanges(); 
     Response.Redirect("frm_confirmation.aspx"); 

    } 
+0

J'ai exécuté votre code. je reçois "row not found" sur la ligne "Class.SubmitChanges();" – PW2

+0

Avez-vous une clé primaire définie dans votre base de données? Si non, vous devriez. –

+0

oui, j'ai la clé primaire. – PW2

0

On dirait que quelqu'un a essayé d'ajouter au code que j'ai origianlly posté dans mon article sur le projet de code. Vous ne savez pas si vous avez lu l'article, mais cela pourrait vous aider à résoudre votre problème et à comprendre comment il a été conçu pour fonctionner. Un lien vous renverrait à une page de suppression qui capturerait le GUID. J'ai utilisé le GUID comme identificateur pour supprimer l'utilisateur. Original Article