【问题标题】:MVC 4 - null model when trying to post a collection of modelsMVC 4 - 尝试发布模型集合时的空模型
【发布时间】:2014-08-17 02:15:30
【问题描述】:

我看过 SO 并且有类似的问题,但我试图回发一组模型,但是当我按下提交按钮时,它抱怨我的模型为空。

我的应用中有这个视图

查看

@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);
        }

我附上了点击帖子时发生的屏幕截图,它突出显示了我的整个网格。

【问题讨论】:

  • 你能发布你的应用程序视图模型代码
  • 试试@model IEnumerable

标签: asp.net-mvc-4 post nullreferenceexception


【解决方案1】:

嗯,不可能从视图向控制器发送列表或对象。即使您只想发布对象,您也必须填写页面上的每个属性...

您可以向控制器发送信息,谢谢,您可以在那里加载列表,或者您需要使用 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多