[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:
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:
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 |