2016-10-04 55 views
-1

在以下問題上搜索了很多內容之後。最後決定與你分享。 我有一個模型。查看到控制器MVC的POST列表集合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> 

現在,當我在視圖中填寫所有細節並單擊提交按鈕時,我在控制器中得到空值。

所以,請幫助我如何讓我的控制器上的修改列表集合。

謝謝..

+0

可能[將HTML表格複製到ADO.NET DataTable](http://stackoverflow.com/questions/30094047/post-an-html-table-to-ado-net-datatable) –

+0

您不能使用'foreach'循環來生成收集iteme的表單控件(請參閱這個笨蛋) –

回答

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的集合和您的解決方案只有一個記錄。你能否提出其他建議? – user2493287

0

嘗試使用IEnumerable和確保你rcshtml文件不打破MVC公約的法律(CSHTML文件的名稱是方法相同)

@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

相關問題