2014-06-26 87 views
0

我看了所以,也有类似的问题,但我想回发一个模型集合,但是当我按下我的提交按钮它抱怨说我的模型一片空白。MVC 4 - null模型当试图发布一个模型集合

我有这种说法在我的应用程序

查看

@model List<Business.Models.Applications.ApplicantViewModel> 
@using GridMvc.Html 
@using (Html.BeginForm("AllocateFirst", "Application", FormMethod.Post)) 
{ 

    <div id="grid-wrap" style="width: 500px;"> 
     Allocate Application 
     <div id="SystemMsg"> 
     </div> 

     @Html.Grid(Model).Named("FirstStageGrid").Columns(columns => 
{ 
    columns.Add(m => m.Id); 
    columns.Add(m => m.MembershipNumber).Titled("Membership number"); 
    columns.Add(m => m.DateReceived).Titled("Registered date"); 
    columns.Add(m => m.Fullname).Titled("Name").Filterable(true).Encoded(false); 
    columns.Add(m => m.ApplicationType).Encoded(false).Sanitized(false); 
    columns.Add(m => m.AssignedStaffMem).Encoded(false).Sanitized(false).RenderValueAs(m => 

     @<b> 
      @Html.DropDownList("ddlStaff", new SelectList(Model.First().ListOfStaff, "UserId", "Fullname")) 
     </b> 
    ); 
    columns 
.Add() 
.Encoded(false) 
.Titled("Action") 
.Sanitized(false) 
.SetWidth(30) 
.RenderValueAs(m => 

    @<b> <a href="#" onclick="AssignStaff(@m.Id, @Html.Raw("\"") @m.Fullname.Trim() @Html.Raw("\""), @m.Id)"> 
     Assign</a> </b> 
); 
}).WithPaging(5) 

    <br /> 
     Assign on bulk: @Html.CheckBox("AssignOnBulk") 
     <br /> 
     <div id="bulkAssign"> 

      Assign to: @Html.DropDownList("ddlStaff", new SelectList(Model.First().ListOfStaff, "UserId", "Fullname")) 
      @Html.Hidden("hdnStaffId") 
      <input type="submit" value="Submit all on bulk" /> 
     </div> 


    </div> 
    <script> 

     $('#AssignOnBulk').on('change', function() { 
      if ($(this).is(':checked')) { 
       $("#bulkAssign").show(); 
       var staffId = $('#ddlStaff').val(); //no :selected here 

      } 
      else { 
       $("#bulkAssign").hide(); 
       $("hdnStaffId").val(this); 
       var staffId = $('#ddlStaff').val(); //no :selected here 
      } 
     }); 

     $('#ddlStaff').change(function() { 
      var staffId = $('#ddlStaff').val(); //no :selected here 
     }); 

     $(document).ready(function() { 
      if ($(AssignOnBulk).is(':checked')) 
       $("#bulkAssign").show(); 
      else 
       $("#bulkAssign").hide(); 
     }); 


     function AssignStaff(appId, fullName) { 
      //Get row based on Id of grid 
      var tableRow = $("td").filter(function() { 
       return $(this).text() == appId; 
      }).closest("tr"); 

      // get staffId based on option selected in tr 
      var staffId = $(tableRow).find('option:selected').val(); 

      $.ajax({ 
       type: "GET", 
       url: '/Application/SetFirstCheck', 
       dataType: 'html', 
       data: { "staffId": staffId, "appId": appId }, 
       success: function (success) { 
        $('#SystemMsg').html(success); 
        $(tableRow).remove(); 
       } 
      }); 
     } 
    </script> 

} 

我所试图做的是,如果用户检查该复选框

Assign on bulk: @Html.CheckBox("AssignOnBulk") 

与按钮的div会显示下拉菜单,用户可以决定将一个人分配给网格中的所有人员,而不是使用操作链接。

我想要做的是按下发布按钮,并从下拉菜单中发回集合加上staffId。但是当我按帖子时,VS2012突出显示了我的网格,并说模型为空。

控制方法

[HttpPost] 
     public ActionResult AllocateFirst(List<Business.Models.Applications.ApplicantViewModel> Model, bool AssignOnBulk, string ddlStaff) 
     { 

      return View(Model); 
     } 

enter image description here

我已经连接的,当我点击后会发生什么的截图,它强调了我的整个网格。

+0

你可以发布你的应用程序视图模型代码 – Amit

+0

尝试@model的IEnumerable Amit

回答

0

那么,从视图无法将List或对象发送到控制器。即使你只想发布对象,你必须填写页面上的每个属性...

你可以发送信息给控制器,谢谢你将能够加载列表那里,或者你需要使用Ajax和JSON.Stringify。

喜欢的东西:

<script> var myList = []; myList.push({ Id: 1, Name: 'Test', Surname: 'Test2' }); jQuery.ajax({ url: '../Controller/Action, data: '{ modelList:' + JSON.stringify(myList) + '}', type: 'POST', cache: false, dataType: 'JSON', contentType: 'application/json; charset=utf-8', success: function (data) { }, error: function (data) { } }); </script>