2010-12-10 7 views
2

J'ai une zone de texte et un bouton. Au chargement de la page, je sélectionne une colonne d'une ligne et place sa valeur dans la zone de texte. J'ai une méthode de clic de bouton qui met à jour la même colonne/ligne avec la valeur dans la zone de texte. Le problème que j'ai est que lorsque j'efface le texte dans la zone de texte, tapez de nouvelles données et cliquez sur soumettre la nouvelle valeur de texte n'est pas en cours d'enregistrement, il utilise l'ancien.problème avec linq à sql mise à jour en utilisant les boîtes de texte asp.net

Je mets un point d'arrêt à la fin de ma méthode de clic de bouton et il semble qu'asp.net envoie l'ancienne valeur de la zone de texte plutôt que la nouvelle que j'ai mise. Je suis totalement perplexe.

  • Ce problème persiste même si j'ai false viewstate dans la zone de texte.
  • Les deux requêtes LINQ sont enveloppées dans une instruction using.

Une idée?

Edit: Voici le code complet:

protected void Page_Load(object sender, EventArgs e) 
    { 

     using (StoreDataContext da = new StoreDataContext()) 
     { 
      var detail = from a in da.Brands 
         where a.BrandID == 5 
         select new 
         { 
          brand = a, 
         }; 
      foreach (var d in detail) 
      { 
       txtEditDescription.Text = d.brand.Description; 
      } 
     } 

    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     using (StoreDataContext dk = new StoreDataContext()) 
     { 

      Brand n = dk.Brands.Single(p => p.BrandID == 5); 

     n.Description = txtEditDescription.Text; 

     dk.SubmitChanges(); 
     } 
    } 
+0

voulez-vous s'il vous plaît envoyer le code –

Répondre

1

Comme vous l'avez dit, dans Page_Load vous récupérez la valeur d'origine dans la zone de texte qui écrase toutes les modifications.

Oui, Page_Load s'exécute avant que Button Click (ou tout autre événement de contrôle) ne soit exécuté. Je vais deviner que vous avez fait le développement de Windows Forms avant cela, le modèle d'événement de formulaires Web ASP.Net est assez différent. Découvrez le ASP.NET Page Life Cycle Overview.

+0

Je n'ai pas fait de développement sérieux avec des formes de victoire. Merci pour le lien. –

1

juste pour tracer l'erreur, s'il vous plaît essayer de mettre une étiquette = (lblDescription.Text) et laisser le reste du code tel qu'il est, mettre la nouvelle valeur dans la zone de texte (editdescription.text) essayez-le et dites-moi ce que vous voyez

foreach (var d in detail) 
     { 
      lblDescription.Text = d.brand.Description; 
     } 
+0

Voir mon édition ci-dessus, j'ai essayé d'utiliser cette syntaxe, mais la valeur d'origine est toujours en cours de publication. –

+1

voir ma réponse, je l'ai compris. –

+0

@nick, congrats j'ai voté pour vous –

1

Je l'ai compris. Je devrais utiliser if (! IsPostBack) sur le code qui remplit à l'origine la zone de texte avec sa valeur.

Cependant, cela n'a aucun sens pour moi. Si la page est chargée et que le texte de la zone de texte reçoit une valeur, effacez cette valeur et essayez de l'insérer dans la base de données, insérez cette valeur puis, lorsque la page sera renvoyée, récupérerez la nouvelle valeur dans la base de données. la valeur dans la zone de texte.

La façon dont cela fonctionne réellement donne l'impression qu'il exécute le code de chargement de la page avant que le code de clic du bouton ne soit exécuté à la publication.

Questions connexes