我有一个表格,用户可以在其中输入与Schedule
模型对应的几个字段。他们还可以从User
的下拉列表中选择Schedule
。要将所有必需的数据发送到视图,我的ViewModel
包含一个Schedule
和一个包含系统中所有用户的IEnumerable<SelectListItem>
。
在我的控制器中,我创建List
SchedulingViewModels
。然后我将List<SchedulingViewModel>
传递给PartialView(我只包括相关部分):
@model List<JNEScheduling.Models.SchedulingViewModel>
...
<tbody>
@for (int i = 0; i < Model.Count; i++)
{
<tr>
<td>
@Html.HiddenFor(m => m[i].ID)
@Html.DropDownListFor(m => m[i].schedule.UserID, Model[i].users)
</td>
<td>
@Html.TextBoxFor(m => m[i].schedule.hours)
</td>
<td>
@Html.TextBoxFor(m => m[i].schedule.week_ending)
</td>
</tr>
}
<tr>
</tbody>
然后我通过Ajax将PartialView加载到我的View中。装载工作正常。但是,当表单为POST
时,它会将一个空的Schedule
对象列表传递给Controller,而不是按预期方式将填充的SchedulingViewModel
对象列表传递给Controller。
我认为它与表单上所有输入的DOM名称有关;它们采用[index].schedule.hours
等形式。如何传回调度视图模型对象列表?或者甚至填充List
个Schedule
个对象也是细
POST
的Jquery:
$('#submitButton').click(function () {
var content = $("form").serialize();
$.ajax({
type: 'POST',
url: '@Url.Action("Table", "Schedule")',
data: content,
success: function (data) {
$('#hoursTable').html(data);
}
});
更新:
在使用Brian GET
之后,来自PartialView
的Ajax SchedulingContainerViewModel
生成的表格的一行。我删除了@Html
方法生成的验证标记:
<tr>
<td>
<input name="Items[0].ID" type="hidden" value="0" />
<select name="Items[0].schedule.UserID">
<option selected="selected" value="1">User 1</option>
<option value="2">User 2</option>
<option value="3">User 3</option>
<option value="4">User 4</option>
<option value="5">User 5</option>
</select>
</td>
<td>
<input name="Items[0].schedule.hours" type="text" value="40.00" />
</td>
<td>
<input name="Items[0].schedule.week_ending" type="text" value="5/26/2017 12:00:00 AM" />
</td>
</tr>
答案 0 :(得分:1)
命名结构看起来正确。 SOmetimes,而不是使用列表,我添加一个包装类,如:
public class ScheduleContainerViewModel
{
public List<SchedulingViewModel> Items { get; set;}
}
会呈现:
Items[index].schedule.hours
我使用这种方法,它适用于我的项目。