IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[MVC] Deux formulaires, au submit de l'un, conserver les données de l'autre


Sujet :

ASP.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut [MVC] Deux formulaires, au submit de l'un, conserver les données de l'autre
    Bonjour à tous,

    Je travaille sur une page simple mais qui pourtant me donne du fil a retordre :
    J'ai une page avec deux formulaires (form) :
    1 pour l'upload d'une image (pointe vers MonController/Upload)
    1 pour inserer des données concernant l'image uploadée (pointe vers MonController/Create)

    Jusqu'ici j'arrive à réaliser ce que je veux : j'uploade mon image, je récupère ses infos que je place dans une instance de mon Model et je renvoie le tout dans les champs du deuxieme form, j'arrive donc avec un formulaire prérempli.

    Mon soucis est le suivant :
    Quand j'arrive à l'étape ou j'ai tout rempli, si je me dis "zut, je me suis planté d'image", que je rappelle l'upload, après etre passé dans l'action Upload je perd toutes les données du Model car il ne fait pas partie du meme model.

    Ma question est la suivante : Comment faire perdurer le model au travers de différents forms ?

    Voici le code :

    Page Create.aspx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
     <% Using Html.BeginForm("Upload", "MonController", FormMethod.Post, New With {.enctype = "multipart/form-data"})%>
                <p><input type="file" id="fileUpload" name="fileUpload" size="23"/> </p>
                <p><input type="submit" value="Upload file" /></p>
            <% End Using %>
     
    <% Using Html.BeginForm()%>
     
            <fieldset>
                <legend>Fields</legend>
     
                <p>
                    <%=Html.TextBox("Fichier")%>
                    Fichier: <%  If Model IsNot Nothing Then
                                     Response.Write(Model.Fichier)
                                 End If
                                 %>
     
                    <a href="#" onclick="jQuery('#dialog').dialog('open'); return false">Upload File</a>
                    <%= Html.ValidationMessage("Fichier", "*") %>
                </p>
                <p>
                    <label for="DatePublication">DatePublication:</label>
                    <%= Html.TextBox("DatePublication") %>
                    <%= Html.ValidationMessage("DatePublication", "*") %>
                </p>
                <p>
                    <label for="Titre">Titre:</label>
                    <%= Html.TextBox("Titre") %>
                    <%= Html.ValidationMessage("Titre", "*") %>
                </p>
                <p>
                    <label for="Description">Description:</label>
                    <%= Html.TextBox("Description") %>
                    <%= Html.ValidationMessage("Description", "*") %>
                </p>
    <p>
                    <input type="submit" value="Create" />
                </p>
            </fieldset>
     
        <% End Using %>
    MonController :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
     Function Upload(ByVal p As Photo) As ActionResult
     
            If Request.Files.Count = 1 Then
                Dim fic As HttpPostedFileBase = Request.Files(0)
                If fic.ContentLength > 0 Then
                    Try
                        Dim bmp As New System.Drawing.Bitmap(fic.FileName)
                        Dim CheminFichier As String = IO.Path.Combine(HttpContext.Server.MapPath("~/Content/Photos"), IO.Path.GetFileName(fic.FileName))
                        fic.SaveAs(CheminFichier)
                        If p Is Nothing Then
                            p = New Photo
                        End If
                        p.Fichier = IO.Path.GetFileName(fic.FileName)
                        TempData.Add("Photo", p)
                        Return RedirectToAction("Create")
                    Catch ex As Exception
                        Return RedirectToAction("Create")
                    End Try
                End If
            End If
     
            Return RedirectToAction("Create")
        End Function
     
     Function Create() As ActionResult
     
            If TempData.Keys.Contains("Photo") AndAlso TempData("Photo") IsNot Nothing Then
                Return View(TempData("Photo"))
            End If
            Return View()
        End Function
     
        '
        ' POST: /PhotosAdministration/Create
     
        <AcceptVerbs(HttpVerbs.Post)> _
        Function Create(ByVal collection As FormCollection) As ActionResult
            Try
                ' TODO: Add insert logic here
                Return RedirectToAction("Index")
            Catch
                Return View()
            End Try
        End Function

  2. #2
    Membre habitué Avatar de Dark Ryus
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 333
    Points : 162
    Points
    162
    Par défaut
    essai avec des updatepanel

  3. #3
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Salut,

    je ne suis pas sur de tout saisir a 100%

    Tu veux que, si tu passes de la page A a la page B, puis que tu retourne a la page A, puis a la page B, tu retrouves tes données dans B ?

    Tu peux essayer de stocker tes donnees dans TempData, ou dans ls session, si c'est le cas

    essai avec des updatepanel
    Bien essaye, mais en MVC, les UpdatePanel...
    Si tu veux travailler en dynamique, regarde du cote de Ajax.BeginForm

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    Salut

    desole pour le temps de reponse j'ai des problemes de connexion, je repond de mon iphone...
    Voici ce que j'aimerai faire:
    j'ai une vue create.aspx liee a un model photo.
    Le model photo attend des infos donnees par l'utilisateur + des infos lues sur l'image uploadee. Ces infos lues sur l'image doivent pouvoir etre modifiees par l'utilisateur avant l'envoi en base de toutes ces donnees.
    Ce qui fait que l'on peut detecter deux actions :
    - une permettant l'upload et la lecture des donnees exifs. Une fois fait, on revient sur la page create.aspx sur laquelle on verra le nom du fichier et les champs exifs pre remplis.
    - une permettant de terminer l'ajout a savoir valider les donnees puis les inserer en base.

    Donc voila exactement ce que j'aimerai faire. Auriez vous une idee?
    Merci d'avance

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    Je pense que ca revient aussi au meme quand on a un model possedant une property de type list(of ).
    Tu as les champs standard (texte, check...) puis une liste a laquelle tu peux ajouter et supprimer des elements. Les boutons ajouter et supprimer un element t'envoient vers une action (ou autre?) de ton controller te permettant de mettre a jour ta collection sans pour autant passer par la validation des donnees ni par l'inscription en base.

    Donc ma question est plus simple : comment realise-t-on de tels boutons/action?

Discussions similaires

  1. Récupérer les données d'un autre formulaire
    Par TRIBORD33 dans le forum IHM
    Réponses: 3
    Dernier message: 24/12/2008, 12h43
  2. [Spring MVC] Deux formulaires sur une même page
    Par djodjo dans le forum Spring Web
    Réponses: 1
    Dernier message: 20/10/2008, 09h52
  3. Réponses: 1
    Dernier message: 20/12/2005, 15h56
  4. Réponses: 8
    Dernier message: 19/05/2005, 16h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo