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 MVC Discussion :

Formulaire dynamique (nombre de champs)


Sujet :

ASP.NET MVC

  1. #1
    Membre actif
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 311
    Points : 257
    Points
    257
    Par défaut Formulaire dynamique (nombre de champs)
    Bonjour,

    j'ai un problème de traitement d'une page contenant un formulaire.

    L'objectif de cette page est de permettre à un utilisateur (chef de projet) de rentrer l'activité (nombre d'heures effectuées et facturables)de plusieurs personnes sur plusieurs contrat. Ce form doit être très pratique.

    Une première page permet de sélectionner tous les contrats, puis une requête permet de savoir tous les salariés sur le contrat. (on voit apparaître deux boucles)

    Voici ma vue :
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<projet.Models.CreationActivite>" %>
     
    <asp:Content ID="Content2" ContentPlaceHolderID="contenuTitre" runat="server">
    Saisie de l'activité
    </asp:Content>
    <asp:Content ID="Content1" ContentPlaceHolderID="contenuContenu" runat="server">
     
    <h1>Saisie de l'activité</h1>
        <% Html.EnableClientValidation(); %>
        <% using (Html.BeginForm("CreerActivite", "Activite", null, FormMethod.Post))
           {%>
           <%: Html.ValidationSummary(true, "Échec de la saisie de l'activité. Corrigez les erreurs et réessayez.")%>
           Activité du <%: (int)ViewBag.mois %> / <%: (int)ViewBag.annee %>
     
           <% foreach(int idContrat in (List<int>)ViewBag.listeIdContrat){ %>
                 <% itsges.Models.ContratModele c = new itsges.Models.ContratModele(idContrat);%>
                 <h2><%: c.Nom %></h2>
                 <% List<itsges.Models.EmployeModele> l = itsges.Models.EmployeModele.ListeEmployeSurPeriode(c.Id, ViewBag.dateDeb, ViewBag.dateFin); %>
                 <table class="presentationDonnees">
    				<thead>
    					<tr>
    						<td>Profil</td>
    						<td>Personne</td>
    						<td>Nb heures prestées - Nb heures facturables | Initial - Consommé - Reste à faire</td>
    					</tr>
     
    				</thead>
                <% if (!l.Any())
                   {%>
                    </table>
                    Pas d'affectations pour ce contrat.<br />
                <%} %>
                <%else
                   { %>
    				<tbody>  
                    <% foreach(itsges.Models.EmployeModele emp in l){ %>    
                        <tr>
    				        <td><% itsges.Models.TypeProfilModele tp = new itsges.Models.TypeProfilModele(emp.IdTypeProfil);
                       Response.Write(tp.Nom);
                          %></td>
    				        <td><% //itsges.Models.PersonneModele  pers = new itsges.Models.PersonneModele(emp.CodePers);
                       Response.Write(emp.CodePers);
                         %></td>
    				        <td>					    
                                <%: Html.TextBoxFor(m => m.nbHPrestees, new { style = "width:50px" })%>
                                <%: Html.ValidationMessageFor(m => m.nbHPrestees, "*")%>
                                <%: Html.TextBoxFor(m => m.nbHFacturables, new { style = "width:50px" })%>
                                <%: Html.ValidationMessageFor(m => m.nbHFacturables, "*")%>
    						        | 100 - 80 - 20 <input type="text" name="nbHPrest" id="Text2" value="<%= emp.Id %>" />
    				        </td>
    			        </tr>
                       <%} %>                 
                     </tbody>                      
    		    </table>
                <%} %>
           <%} %>
    		<input name="envoyer" value="Enregistrer" type="submit"/>
            <%} %>
    </asp:Content>
    et mon controlleur pour afficher la vue :

    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
     
     public ActionResult CreerActivite(String idContrat, String date)
            {
                List<int> listeIdContrat = new List<int>();
                string[] words = idContrat.Split('-');
                foreach (string idString in words)
                {
                    if(!idString.Equals("")) listeIdContrat.Add(Int32.Parse(idString));
                }
                DateTime dateTest = DateTime.ParseExact(date, "dd-MM-yyyy", null);
                int nbJourMois = DateTime.DaysInMonth(dateTest.Year, dateTest.Month);
                ViewBag.mois = dateTest.Month;
                ViewBag.annee = dateTest.Year;
                ViewBag.dateDeb = dateTest.Year + "-" + dateTest.Month + "-01";
                ViewBag.dateFin = dateTest.Year + "-" + dateTest.Month + "-" + nbJourMois;
                ViewBag.listeIdContrat = listeIdContrat;
                return View();
            }
    Ainsi que ma tentative de modele pour m'aider à valider ce formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
     
        public class CreationActivite
        {
            [Required]
            [Display(Name = "Nb h. prestées")]
            public double nbHPrestees { get; set; }
     
            [Required]
            [Display(Name = "Nb h. facturables")]
            public double nbHFacturables { get; set; }
        }
    Comment traiter mon problème ? pour :
    - vérifier que les données sont OK (non vides) (un unique htmlhelper ne suffit pas car même ID) ;
    - Savoir quelle ligne appartient à quel contrat (j'ai pensé mettre un champs hidden à la fin de la ligne mais c'est BOF) ;
    - ne pas traiter chaque activité l'une après l'autre, ce qui prendrait trop de temps.

    N'hésitez pas à me demander plus d'informations si quelque chose n'est pas clair.

    Merci par avance.
    @+

  2. #2
    Membre actif
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 311
    Points : 257
    Points
    257
    Par défaut
    Bonjour,

    j'ai pensé faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    <input name="nbHPrestees[]" style="width:50px;" value="<%= hshTableHPrestees != null ? hshTableHPrestees[emp.Id] : "" %>"/>
                                - <input name="nbHFacturables[]" style="width:50px;" value="<%= hshTableHFacturables != null ? hshTableHFacturables[emp.Id] : ""%>" />
                                | ///TODO 100 - 80 - 20 <input type="text" name="empId[]" value="<%= emp.Id %>" />
    				        </td>
    Autrement dit utiliser des tableaux.

    Par contre dans le controlleur, dans la définition de ma méthode j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      public ActionResult CreerActivite(string listeIdC, string[] nbHPrestees, string[] nbHFacturables, int[] empId)
    mais ils restent à null.

    Comment passer ces paramètres à mon controlleur sans utiliser de htmlhelper ?

    Merci par avance.
    @+

  3. #3
    Membre actif
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 311
    Points : 257
    Points
    257
    Par défaut
    Bon j'ai trouvé la solution :-) !!

    Vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <td>					    
                                <%: Html.TextBoxFor(m => m.nbHPrestees[i], new { style = "width:50px" })%>
    						    <%: Html.ValidationMessageFor(m => m.nbHPrestees[i], " * ")%>
                                 - <%: Html.TextBoxFor(m => m.nbHFacturables[i], new { style = "width:50px" })%><%: Html.ValidationMessageFor(m => m.nbHPrestees[i], " * ")%>
                                | ///TODO 100 - 80 - 20 <input type="text" name="empIds<%= "[" + i + "]" %>" id="empIds<%= "[" + i + "]" %>" value="<%= emp.Id %>" />
    				        </td>
    Controlleur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fonction( CreationActivite c)
    Modele
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      public class CreationActivite
        {
            [Required]
            public IList<double> nbHPrestees { get; set; }
     
            [Required]
            public IList<double> nbHFacturables { get; set; }
     
            [Required]
            public IList<int> empIds { get; set; }
    }
    En espérant que ça aide quelqu'un un jour :-).

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. PHP : Formulaire dynamique, ajout de champ
    Par Invité dans le forum Langage
    Réponses: 9
    Dernier message: 07/05/2014, 10h08
  2. [PHP 4] formulaire dynamique + création de champ + post = Gros Souci
    Par fred2b06 dans le forum Langage
    Réponses: 3
    Dernier message: 15/03/2011, 14h28
  3. Réponses: 0
    Dernier message: 22/10/2008, 17h44
  4. Formulaire avec nombre de champ variable
    Par david87 dans le forum IHM
    Réponses: 0
    Dernier message: 21/04/2008, 11h16
  5. Formulaire avec nombre de champs dynamique
    Par kodo dans le forum Struts 1
    Réponses: 1
    Dernier message: 21/01/2008, 11h07

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