2009-08-24 3 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

+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

バインド?私は動的に生成された(番号、順序、要素の型は常に異なっています)、どのオブジェクトともバインドできません。 – Ante

1

フォームの処理方法を決定する際に役立つよう、いくつかの追加情報があると便利です。

  • 何かがこのフォームを生成する決定をしています、それは何ですか?レンダリングの基礎は何ですか?

  • 実際には互いに独立しているか、または説明できる形式のバリエーションはありますか?

  • 各要素自体は既知ですか?そうであれば、サーバ側で認識されるように一貫性のあるID /名前を付けることは可能でしょうか?

  • あなたが提出物を「扱う」と言うとき、達成したい最終目標は何ですか?たとえば、データベースに格納するためにフォームを解析していますか?

+0

私は、テキストボックス、チェックボックス、ラジオボタンなどのさまざまなタイプの回答を持つ質問のリストを持っています。問題は、チェックボックス項目の値のリストと残りの値の単一値を送信するため、フォームコレクションのハンドリングです。 – Ante

+0

質問のリストは常に異なるので、私はそれらに同じ名前をつけることができます。私は彼らに名前 "q" + question_numberを与えています – Ante

+0

私はまだ不明確で、助けてくれる部分は、あなたがそれを処理した後にデータを扱うことを望んでいます。具体的には、文脈知識を実際に解析する必要があるかどうかを判断しようとしています。 フォーム上で反復処理を行い、答えをそのままとって、質問番号に基づいて保存するのは簡単ですか? –

関連する問題