我看过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);
}
我附上了点击帖子时发生的情况的截图,它突出显示了我的整个网格。
答案 0 :(得分: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>