提问人:nick gowdy 提问时间:6/26/2014 更新时间:6/26/2014 访问量:273
MVC 4 - 尝试发布模型集合时出现空模型
MVC 4 - null model when trying to post a collection of models
问:
我看过 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。但是当我按下 post 时,VS2012 突出显示了我的网格并说模型为 null。
控制器方式
[HttpPost]
public ActionResult AllocateFirst(List<Business.Models.Applications.ApplicantViewModel> Model, bool AssignOnBulk, string ddlStaff)
{
return View(Model);
}
我附上了一张截图,记录了我点击帖子时会发生什么,它突出显示了我的整个网格。
答:
好吧,不可能从视图中将列表或对象发送到控制器。即使你只想要发布对象,你也必须填写页面上的每个属性......
您可以将信息发送到控制器,感谢它,您将能够在那里加载列表,或者您需要使用 Ajax 和 JSON。字符串化。
像这样:
<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>
评论