2009-08-24 41 views
2

如何處理動態生成的表單在asp.net mvc中提交?如何處理動態創建的表單提交?

表單是動態創建的(數量,順序和類型的元素總是不同的),我必須在asp.net mvc控制器(沒有viewstate)中處理它(存儲數據在數據庫中)。輸入的類型可以是一切;隱藏字段,單選按鈕,複選框,文本輸入等。

<% 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 2009-08-24 12:54:15

+0

還不夠?我不確定要寫什麼。 – Ante 2009-08-24 13:50:38

回答

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 2009-08-25 10:22:38

+0

我想你可以通過這個來枚舉。如果你傳入一個元素數組,那麼你可以直接綁定到一個數組,這更容易。 – 2009-08-25 12:53:35

+0

綁定?我有動態生成(數量,順序和類型的元素總是不同)形式,不能綁定任何對象。 – Ante 2009-08-25 12:59:47

1

爲了更好地幫助您決定如何處理表單,可能需要一些附加信息。

  • 有些東西正在決定生成這種形式,那是幹什麼的?它的基礎是什麼?

  • 是否存在可以說明的形式的已知變化,或者是否是相互獨立的元素?

  • 每個元素本身是否已知?如果是這樣,是否可以給他們一個一致的ID /名稱,以便他們可以在服務器端進行識別?

  • 當您談到「處理」提交內容時,您希望實現的最終目標是什麼?例如,你是否解析表單以存儲在數據庫中?

+0

我有不同類型的答案,如文本框,複選框,單選按鈕等問題列表。問題是表單集合handeling,因爲它發送複選框項目的值列表和其餘的單值。 – Ante 2009-08-25 13:57:08

+0

問題列表總是不同的,所以我可以將它們命名爲相同的..我給他們的名字「Q」+ question_number – Ante 2009-08-25 13:58:24

+0

我仍然不清楚的部分,並相信可能有所幫助,知道你是什麼在處理完數據後查看數據。具體而言,我試圖確定您實際需要解析多少上下文知識。 這是否像迭代表單並逐字回答問題一樣簡單,並根據問題編號進行存儲? – 2009-08-25 14:09:53