2009-08-24 2 views
2

Как обрабатывать динамически сгенерированную форму submit asp.net mvc?Как я могу обработать динамически созданный форму submit?

Форма динамически создана (количество, порядок и тип элементов всегда разные), и я должен обрабатывать его (хранить данные в базе данных) в контроллере asp.net mvc (нет виджета). Тип ввода может быть всем; скрытые поля, радио-кнопки, флажки, текстовые материалы и т.д ..

<% using (Html.BeginForm("AddAnswer","Research")){ %> 

<%= Html.Hidden("page", ViewData["curentPage"]) %> 

<% foreach (var item in Model){ %> 

<span><%= Html.Encode(item.Text) %></span> 
    <%= Html.ActionLink("Edit", "Edit", new {id=item.QuestionID}) %> 
    | 
    <%= Html.ActionLink("Details", "Details", new { id=item.QuestionID })%> 

    <%switch (item.QuestionTipe.QuestionTipeID){ 

     case 4:%> 
     <table> 
      <%foreach (var offeredAnswer in item.OfferedAnswer) {%> 
       <tr> 
        <td><%= Html.CheckBox("q" + item.QuestionID, false, new{ value = offeredAnswer.Number})%></td> 
        <td><%= offeredAnswer.Text%></td> 
       </tr> 
      <%}%> 
     </table> 
     <% break; 

     case 1:%> 
     <table> 
      <% foreach (var offeredAnswer in item.OfferedAnswer) {%> 
       <tr> 
        <td><%= Html.RadioButton("q" + item.QuestionID, false, new{ value = offeredAnswer.Number})%></td> 
        <td><%= offeredAnswer.Text%></td> 
       </tr> 
      <%}%> 
     </table> 

     <% break; 

     case 2:%> 
     <div style="width:220px; height:20px; padding-top:10px; padding-left:8px;"> 
      <%= Html.TextBox("q" + item.QuestionID, null, new { style = "width:200px;"})%> 
     </div> 
     <% break; 

     case 3:%> 
     <div style="width:220px;height:20px; padding-top:10px;padding-left:8px;"> 
      <div id="q<%= item.QuestionID %>" style="width:200px;" class="slider"> 
      </div> 
      <%= Html.Hidden("q" + item.QuestionID, 0)%> 
     </div> 
     <% break; 
    }%> 
<%}%> 

<p> 
    <input type="submit" value="Sljedeća strana" /> 
</p> 
<%}%> 
+0

Не могли бы вы пояснить, что вы имеете в виду? – JustLoren

+0

Недостаточно? Я не уверен, что писать ... – Ante

ответ

0
foreach (var key in form.AllKeys) { 
        var answers = form.GetValues(key); 

        if (answers.Count() > 1){ 
         foreach (var value in answers) 
         { 
          ... 
         } 
        } 

        else 
        { 
         ... 
        } 
} 

Это очень просто. Я проверяю, есть ли несколько значений для некоторых ответов в форме.

4

В вашем методе действия, вы можете получить доступ к параметру FormCollection, оттуда, вы можете получить доступ ко всем передается в значениях от вашего представить действия.

public ActionResult YourActionMethod(FormCollection form) 
{ 

} 
+0

и как бы вы справились с этой коллекцией форм, если вы не знаете размер или элементы внутри него? – Ante

+0

Я думаю, вы можете перечислить это. Если вы передадите массив из элемента, вы можете напрямую связать его с массивом, что еще проще. –

+0

Bind? Я динамически генерировал (число, порядок и тип элементов всегда разные), которые не могут быть привязаны к любому объекту. – Ante

1

Чтобы лучше всего помочь вам решить, как обрабатывать форму, может оказаться полезным получить дополнительную информацию.

  • Что-то принимает решение о создании этой формы, что это делает? На чем основывается его рендеринг?

  • Существуют ли известные варианты формы, которые могут быть учтены или являются элементами, которые действительно независимы друг от друга?

  • Известны ли каждый из элементов? Если да, можно ли дать им согласованное id/name, чтобы они могли быть распознаны на стороне сервера?

  • Когда вы говорите о «обработке» представления, какова конечная цель, которую вы хотели бы достичь? Например, вы разбираете форму для хранения в базе данных?

+0

У меня есть список вопросов с различными типами ответов, таких как текстовое поле, флажок, радиокнопки и т. Д. Проблема заключается в обработке коллекции форм, поскольку она отправляет список значений для элементов флажка и одно значение для остальных из них. – Ante

+0

список вопросов всегда различен, поэтому я могу назвать их одинаковыми .. Я даю им имя «q» + question_number – Ante

+0

Часть, о которой я до сих пор не понимаю, и, может быть, может помочь, знает, что вы глядя на данные после обработки. В частности, я пытаюсь определить, сколько знаний контекста вам нужно для синтаксического анализа. Это так же просто, как итерация по форме и принятие ответа, дословный и сохранение ее на основе номера вопроса? –

Смежные вопросы