2010-06-17 8 views
0

J'ai ma première page ASPX qui a des données que l'utilisateur remplit. Il est au format de textbox et à la fin de tous les clics de l'utilisateur soumettre et toutes les données entrent la base de données. Dans la base de données, chaque enregistrement reçoit un champ ID. Maintenant, lorsque les utilisateurs cliquent sur soumettre et va à la page suivante, je veux les ID (ils pourraient être de 1 à 1000 +) de la DB qu'il vient d'insérer et les rendre disponibles sur la deuxième page. Comment puis-je prendre tous les identifiants de la page 1 à la page 2? puis-je le faire en session? ou autre chose. S'il vous plaît mettez un exemple de code afin que je puisse mieux comprendre.stocker plusieurs ID de la première page aspx à la prochaine page ASPX

+0

si elle est persisté à la DB, pourquoi avez-vous passer à travers la page? Juste obtenir les données à nouveau sur la page 2. – RPM1984

Répondre

0

Cela peut être fait, et ce n'est pas si difficile. En un mot, voici ce que vous voulez faire:

  • pour chaque élément que vous insérez dans la base de données, retourner le de nouvel élément créé id
  • magasin id de la rubrique enregistré dans vos méthodes de base de données quelque part facile d'accès - La session est un bon endroit.
  • Sur la page suivante, vous pouvez accéder à votre variable de session pour récupérer les identifiants que vous avez enregistrés.

(en cours de modification post pour ajouter du code)

Le meilleur et le plus sûr moyen de retour est par le biais de transactions de nouveau inséré ID (plus, s'il y a un problème avec l'insert, vous pouvez rouler en arrière). Voici comment une transaction regarderait où nous faisons un insert et retourner un ID:

ALTER PROCEDURE [dbo].[storeFrontItems] 
    @itemName NVARCHAR(255),      
    @itemDescription NVARCHAR(255), 

    @newItemID INT OUTPUT 
AS 

    BEGIN TRANSACTION 
    INSERT INTO storeFrontItems (Name, Description) VALUES (@itemName, @itemDescription) 
    SET @error = @@ERROR 
    IF @error <> 0 
    BEGIN 
     ROLLBACK TRANSACTION 
     RETURN @error 
    END 
    ELSE 
    BEGIN 
     SELECT @newItemID = @@IDENTITY 
    END 
    COMMIT TRANSACTION 


    RETURN 

Ensuite, vous pouvez enregistrer votre nouvel ID dans une variable de session

Dim newlyCreatedItemID int 
    newlyCreatedItemID = databaseInsertNewItem /* ... */ 

    /* to store it in a session variable */ 
    Session("NewItemID") = newlyCreatedItemID 

    /* to retrieve it from a session variable */ 
    newlyCreatedItemID = i = CType(Session("NewItemID"), newlyCreatedItemID) 
+0

je reçois cette partie. donc quand je reviens avec le @newitemid, alors je fais Session ("itemid") = @newitemid. ne remplacera-t-il pas le premier newitemid avec le suivant sur chaque insert? comment puis-je les mettre en session comme disent 1,2,3,4,5 ... ou est-ce que je comprends mal? – poller

+0

Vous pouvez aussi stocker _objets_ dans la session - comme des tableaux, des hashmaps, etc. Cela vous aidera-t-il? –

0

d'abord créer une sorte de sessionId et le stocker dans l'objet de session.

Session["SessionId"] = Guid.NewGuid().ToString(); 

lors du stockage des id, dans la db, enregistre aussi le SessionId (ci-dessus) avec elle, de sorte que vous saurez tous les enregistrements pour cette session.

Puis, dans la page suivante, juste faire une requête pour obtenir tous les id liés à cette SessionId