2016-02-05 82 views
1

我有问题从mvc中的简单视图发回值给我的控制器。MVC - 查看不传回模型列表值到控制器

在视图中,我有一个简单的表格,该表格在用户选择下拉列表值时填充。下面是视图的提取物:

@model IList<RFQFreight.Models.TargetTransitTotal> 

@using (Ajax.BeginForm("InputTimev2", "Target", 
      new AjaxOptions 
      {UpdateTargetId = "result", HttpMethod = "POST", 
       InsertionMode = InsertionMode.Replace})) 
{ 

<table class="tblTarTime"> 
      <thead> 
       <tr><td>Select RFQ</td></tr> 
      </thead> 
      <tr> 
       <td> 
        <select id="ddlTarTimRFQs" name="ddlTarTimRFQs"> 
         @{ 
          string getRfqUrlId =   HttpContext.Current.Request.QueryString["rfqid"]; 
          if (getRfqUrlId == null){getRfqUrlId = "";} 
          List<string> rfqLst = ViewBag.rfqsLst; 
          rfqLst.Sort(); 
         } 
         <option value=""></option> 
         @foreach (var item in ViewBag.rfqsLst) 
         { 
          if (getRfqUrlId == item) 
          {<option value="@item" selected>@item</option>} 
          else{<option value="@item">@item</option>} 
         } 
        </select> 
       </td> 
      </tr> 
     </table> 

<table id="tblTarTime" class="tblTarTime"> 
      @if (ViewBag.rfqSelected == true) 
     { 

       <thead> 
        <tr> 
         <td>Route</td> 
         <td>Transit Target Time</td> 
        </tr> 
       </thead> 
       foreach (var item in Model) 
       { 
        <tr>        
         @Html.HiddenFor(model => item.rfqId)       
        </tr> 
        <tr> 
         <td> 
          @Html.DisplayFor(model => item.serviceId) 
          @Html.HiddenFor(model => item.serviceId) 
         </td> 
         <td> 
          @Html.TextBoxFor(model => item.amount) 
          @Html.HiddenFor(model => item.amount) 
          @*<input type="text" value="@item.amount" />*@ 
         </td> 
        </tr> 
       } 
       <tr><td colspan="2"></td></tr> 
       <tr> 
        <td colspan="2"> 
         @*<a href="#" class="linkSubmit" id="save">Save</a>*@ 
         <input type="submit" value="Save" id="saveTarget" onclick="checkInputsTime(event)" /> 
        </td> 
       </tr> 
      } 
      else 
      { 
       <tr><th width="400">No Routes Available</th></tr> 
      } 
     </table> 

这里被从[获取]控制器功能的提取物:

public ActionResult InputTimev2(string rfqid = "") 
    { 
if (rfqid == "") 
{ 
}else{ 
//page load after rfqid dropdown selection 
      var getLstTargetTransit = new List<TargetTransitTotal>(); 
      getLstTargetTransit = (from targetRows in db.TargetTransitTotals 
            join rfqs in db.RFQMasters on  targetRows.rfqId equals rfqs.RfqId 
            where rfqs.Status != "COMPLETED" 
            select targetRows).ToList(); 
      dynamic rfqLst = new List<string>(); 
      rfqLst = (from rfq in getLstTargetTransit orderby rfq.rfqId descending select rfq.rfqId).Distinct().ToList(); 
      ViewBag.rfqsLst = rfqLst; 
      ViewBag.rfqSelected = true; 

      var lstTargetTransit = new List<TargetTransitTotal>(); 
      lstTargetTransit = (from targetRows in getLstTargetTransit where targetRows.rfqId == rfqid 
           select targetRows).ToList(); 

      lstTargetTransit.RemoveRange(1, lstTargetTransit.Count - 1); 
      return View(lstTargetTransit); 
} 

这里被从[POST]控制器功能的提取物:

[HttpPost] 
    public ActionResult InputTimev2(List<TargetTransitTotal> model) 
{ 
    if (model != null) //This value is showing as null 
    { 
    } 
} 

任何人都可以向我解释为什么模型在视图中正确发送和显示,但是当它返回到控制器(后)时,模型中什么都没有?

感谢

回答

1

我认为问题是,你渲染值的两倍:

<td> 
    @Html.DisplayFor(model => item.serviceId) 
    @Html.HiddenFor(model => item.serviceId) 
</td> 

所以项目被发送回控制器两次了。 ModelBinder不能决定使用哪一个。 尝试删除HiddenFor()。

相关问题