2014-06-26 120 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>