2010-11-16 4 views
0

У меня есть страница, содержащая форму, где ее часть динамически генерируется исходя из того, какие SKU находятся на заказ.Получение данных из динамической формы с 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%> 

Это ни в коем случае не идеальный вариант, но в настоящее время он выполняет свою работу.

Часть я борюсь с как return_<%=i.SKUN%> серия динамически создаваемых текстовых полей, которые изменяются для каждого заказа, хотя они остаются с именовании о return_<%=i.SKUN%>, как я могу получить значения для них в моем контроллере, обрабатывает сообщение формы?

EDIT: Важно также отметить, что ни одно из этих полей не является обязательным, а количество текстовых полей зависит от каждого заказа.

ответ

2

не могли бы вы изменить соглашение об именах для:

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

где index будет увеличивающееся переменной от 0 до п. Таким образом, действие вашего контроллера может выглядеть так:

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

И оставить по умолчанию модельное связующее, выполняющее эту работу.

+0

Если связующее по умолчанию имеет трудности, вы можете перечислить Request.Form.Where (q => q.Name.StartsWith ("skuns [")); – Amethi

+0

До тех пор, пока вы уважаете соглашение об именах, связующее устройство по умолчанию никогда не сталкивается с трудностями и лучше использует строго типизированные аргументы. –