2016-10-04 7 views
-1

以下の問題で多くの検索を行った後。最後にあなたと分かち合うことに決めました。 私は1つのモデルを持っています。ビューからコントローラへのPOSTリストコレクションMVC 4

public class EarlyBirdWeb 
    { 
     public string Client { get; set; } 
     [Display(Name = "Job Name")] 
     public string JobName { get; set; } 
     public List<SelectListItem> Reasons { get; set; } 
     public List<Status> status { get; set; } 
     public List<ETA> etas { get; set; } 
     [Display(Name="Call BU")] 
     public string CallBU { get; set; } 
    } 

私はこのモデルをMVCビューにバインドしています。私の考えは次の通りです。

@model List<EarlyBird.Models.EarlyBirdWeb> 

<form method="post"> 
    @Html.AntiForgeryToken() 

    <div class="row"> 
     <table class="table table-bordered table-inverse"> 
      <tr class="bg-warning"> 
       <th>Client 
       </th> 
       <th>Job Name 
       </th> 
       <th>Reason</th> 
       <th>Status</th> 
       <th>ETA</th> 
       <th>CallBU? 
       </th> 

      </tr> 

      @foreach (var item in Model) 
      { 
       <tr> 
        <td> 
         @item.Client 
         @Html.Hidden(@item.Client) 
        </td> 
        <td> 
         @item.JobName 
        </td> 
        <td> 
         @Html.DropDownList("--Select One--", (IEnumerable<SelectListItem>)@item.Reasons) 

        </td> 
        <td> 
         <select> 
          @foreach (var status in item.status) 
          { 
           <option value="@status.StatusName">@status.StatusName</option>   
          } 
         </select> 
        </td> 
        <td> 
         <select> 
          @foreach (var etas in item.etas) 
          { 
           <option value="@etas.ETATime">@etas.ETATime</option>   
          } 
         </select> 
        </td> 
        <td> 
         @item.CallBU 
        </td> 
       </tr> 
      } 

     </table> 

    </div> 
    <div class="row"> 
     <input type="submit" value="Submit" name="Submit" class="btn btn-warning" /> 
    </div> 
</form> 

ここで、すべての詳細を入力して[送信]ボタンをクリックすると、コントローラにnullが表示されます。

私は、変更されたリストコレクションをコントローラでどのように入手できるのか教えてください。

おかげ..

+0

(CSHTMLファイルの名前は、メソッドのために同じである)のIEnumerableを使用すると、あなたはrcshtmlファイルはMVC大会の法律を壊さないことを確認してみてください[ADO.NET DataTableへのHTMLテーブルの投稿](http://stackoverflow.com/questions/30094047/post-an-html-table-to-ado-net-datatable) –

+0

「foreach」を使用することはできませんループを使用してコレクション項目のフォームコントロールを生成する(括弧を参照) –

答えて

0

次のコードは正常に動作し、以下のコードを参照してください

モデル:

public class EarlyBirdWeb 
    { 
     public string Client { get; set; } 
     [Display(Name = "Job Name")] 
     public string JobName { get; set; } 
     public List<SelectListItem> Reasons { get; set; } 
     public List<Status> status { get; set; } 
     public List<ETA> etas { get; set; } 
     [Display(Name="Call BU")] 
     public string CallBU { get; set; } 
    } 

コントローラ

[HttpPost] 
    public ActionResult Sample(EarlyBirdWeb model) 
     { 
      if (ModelState.IsValid) 
      { 
        // do your stuff like: save to database and redirect to required page. 
      } 

      // If we got this far, something failed, redisplay form 
      return View(model); 
     } 

ビュー

@model MvcForums.Models.EarlyBirdWeb 

@{ 
    using (Html.BeginForm("Sample", "ControllerName", FormMethod.Post)) 
    { 
     <label>Client</label> 
     @Html.TextBoxFor(m => m.Client) 

     <br/> 

     <label>JobName</label> 
     @Html.TextBoxFor(m => m.JobName) 

     <input type="submit" value="btnSubmit" /> 

    } 
} 
+0

お返事ありがとうございます。しかし、私の見解では、EarlyBirdWebのコレクションとあなたの解決策を1つのレコードだけに戻すつもりです。他に何か提案してください。 – user2493287

0

可能
@model IEnumerable<EarlyBird.Models.EarlyBirdWeb> 

    @using (Html.BeginForm()) 
       { 
     @Html.AntiForgeryToken() 

     <div class="row"> 
      <table class="table table-bordered table-inverse"> 
       <tr class="bg-warning"> 
        <th>Client 
        </th> 
        <th>Job Name 
        </th> 
        <th>Reason</th> 
        <th>Status</th> 
        <th>ETA</th> 
        <th>CallBU? 
        </th> 

       </tr> 

       @foreach (var item in Model) 
       { 
        <tr> 
         <td> 
          @item.Client 
          @Html.Hidden(@item.Client) 
         </td> 
         <td> 
          @item.JobName 
         </td> 
         <td> 
          @Html.DropDownList("--Select One--", (IEnumerable<SelectListItem>)@item.Reasons) 

         </td> 
         <td> 
          <select> 
           @foreach (var status in item.status) 
           { 
            <option value="@status.StatusName">@status.StatusName</option>   
           } 
          </select> 
         </td> 
         <td> 
          <select> 
           @foreach (var etas in item.etas) 
           { 
            <option value="@etas.ETATime">@etas.ETATime</option>   
           } 
          </select> 
         </td> 
         <td> 
          @item.CallBU 
         </td> 
        </tr> 
       } 

      </table> 

     </div> 
     <div class="row"> 
      <input type="submit" value="Submit" name="Submit" class="btn btn-warning" /> 
     </div> 
    } 
+0

返信ありがとうございます。私はすでにそれを試した。動作しません。 – user2493287

関連する問題