2010-11-16 3 views
0

J'ai une page qui contient un formulaire, dont une partie est générée dynamiquement en fonction de ce que les SKU sont sur une commande.Obtention de données publiées à partir d'un formulaire dynamique avec MVC

<% for each i in ViewData.Model %> 
        <script type="text/javascript"> 
         $(function() { 
          $('#return_<%=i.SKUN%>').change(function() { 
           if ($('#return_<%=i.SKUN%>').val() > $('#qty_<%=i.SKUN%>').val()) { 
            $('#Discrepancy').val("Yes"); 
           } else { 
            $('#Discrepancy').val(""); 
           } 
          }); 
         }); 
        </script> 
        <tr> 
         <td style="text-align: left"><%= i.SKUN%></td> 
         <td style="text-align: left; width: 360px"><%= i.DESCR%></td> 
         <td style="text-align: left">&pound;<%= i.PRIC%></td> 
         <td style="text-align: left"><%= i.QUAN%></td> 
         <td style="text-align: left">&pound;<%= i.EXTP%></td> 
         <td style="text-align: left"><input type="hidden" name="qty_<%=i.SKUN%>" id="qty_<%=i.SKUN%>" value="<%= i.QUAN%>"/><input type="text" name="return_<%=i.SKUN%>" id="return_<%=i.SKUN%>" style="width:50px;" class="required"/> 
          <% If i.FLAG3 = "T" Then 
            %> <img src="../../Content/images/icons/error.png" alt="This SKU is subject to a <%=Html.ViewData("RestockFee") %>% restocking fee" title="This SKU is subject to a <%=Html.ViewData("RestockFee") %>% restocking fee"/><% 
           End If%> 
         </td> 
        </tr> 
        <% Next%> 

Ce n'est pas du tout parfait, mais cela fait l'affaire en ce moment.

La partie que je me bats avec est aussi return_<%=i.SKUN%> est une série de zones de texte générées dynamiquement qui changent pour chaque commande, bien qu'ils restent avec la convention de nommage de return_<%=i.SKUN%>, comment puis-je obtenir les valeurs pour eux dans mon contrôleur gère le poste de formulaire?

EDIT: Il est également important de noter qu'aucun de ces champs n'est obligatoire et que le nombre de zones de texte varie selon l'ordre.

Répondre

2

Ne peut pas vous changer la convention de nommage à:

<input 
    type="text" 
    name="skuns[<%= index %>]" 
    id="return_<%= i.SKUN %>" 
    style="width:50px;" 
    class="required" 
    value="<%= i.SKUN %>" 
/> 

index serait une variable incrémenter de 0 à n. De cette façon, l'action de votre contrôleur pourrait ressembler à ceci:

Public Function Result(skuns As String()) As ActionResult 

Et laissez le classeur par défaut faire le travail.

+0

Si le classeur par défaut rencontre des difficultés, vous pouvez énumérer Request.Form.Where (q => q.Name.StartsWith ("skuns [")); – Amethi

+0

Tant que vous respectez la convention de nommage, le classeur par défaut n'a jamais de difficultés et il est préférable d'utiliser des arguments d'action fortement typés. –

Questions connexes