У меня есть немного сложная ViewModel, которая имеет атрибуты Enum, List и т. Д. Поэтому я хочу сериализовать все данные и передать их контроллеру.
Я перечисляю все элементы модели представлений на столе. Почти все поля доступны для редактирования. Я изменяю некоторые поля строки и нажимаю кнопку сохранения в конце строки. Но когда я нажимаю кнопку сохранения, я вижу, что мой параметр пуст в контроллере.
Вот снимок моей страницы.
![enter image description here](https://i.stack.imgur.com/GqaSE.png)
Моя ViewModel
namespace MyProject.ViewModel
{
public class ProductLogicViewModel
{
public int ProductId { get; set; }
public string ProductText { get; set; }
public EnumContentSendType CmsAboneSendType { get; set; }
public EnumContentSendType CmsTekilSendType { get; set; }
public List<TimeSpan> DailyTimes { get; set; }
public List<DaysOfLogic> WeeklyDays { get; set; }
public List<TimeSpan> WorkingHoursInterval { get; set; }
public int SendingPeriod { get; set; }
public DateTime LastSendTime { get; set; }
public int LogicType { get; set; }
public int ParentId { get; set; }
}
public class DaysOfLogic
{
public DayOfWeek DayOfWeek;
public bool Checked { get; set; }
}
}
Мой Index.cshtml. Здесь я дал разные номера идентификаторов всем начальным формам HTML, но на самом деле я не знаю, было ли это необходимо.
@model IEnumerable<ProductLogicViewModel>
<script type="text/javascript">
$(document).on("click", "#update", function () {
update($(this));
});
function update($this) {
$.ajax({
type: "POST",
url: '@Url.Action("Update", "TimeManagement")',
cache: false,
data: JSON.stringify({ productLogicViewModel: $("#TimeManagementUpdateForm" + $this.data("formnumber")).serialize() }),
success: function (data) {
// do something
}
});
}
</script>
<table class="table table-striped table-bordered table-list">
<thead style="background-color:#337ab7; color:aliceblue">
<tr>
<th style="text-align: center;vertical-align: middle">Servis İsmi</th>
<th style="text-align: center;vertical-align: middle">Abone Gönderim Tipi</th>
<th style="text-align: center;vertical-align: middle">Tekil Gönderim Tipi</th>
<th style="text-align: center;vertical-align: middle">Gönderim Saatleri</th>
<th style="text-align: center;vertical-align: middle">Gönderim Günleri</th>
<th style="text-align: center;vertical-align: middle">Gönderi Kısıtı</th>
<th></th>
</tr>
</thead>
<tbody>
@{ int formNumber = 0; }
@foreach (var item in Model)
{
formNumber++;
using (Html.BeginForm("Update", "TimeManagement", FormMethod.Post, new { @id = "TimeManagementUpdateForm" + @formNumber }))
{
<tr>
<td style="text-align: center;vertical-align: middle">
@Html.DisplayFor(modelItem => item.ProductText)
</td>
<td style="text-align: center;vertical-align: middle">
@Html.EnumDropDownListFor(modelItem => item.CmsAboneSendType, new { @class = "form-control" })
</td>
<td style="text-align: center;vertical-align: middle">
@Html.EnumDropDownListFor(modelItem => item.CmsTekilSendType, new { @class = "form-control" })
</td>
<td style="text-align: center;vertical-align: middle;max-width:100px;">
@Html.EditorFor(modelItem => item.DailyTimes, new { @class = "form-control" })
</td>
<td style="text-align: center;vertical-align: middle">
for (var i = 0; i < item.WeeklyDays.Count; i++)
{
@Html.CheckBoxFor(m => item.WeeklyDays[i].Checked)
@item.WeeklyDays[i].DayOfWeek
}
</td>
<td style="text-align: center;vertical-align: middle;max-width:100px;">
@Html.EditorFor(modelItem => item.WorkingHoursInterval, new { @class = "form-control" })
</td>
<td style="text-align: center;vertical-align: middle;max-width:100px;">
<button type="button" class="btn btn-primary btn-xs" id="update" title="Güncelle" data-formnumber="@formNumber">
<span class="glyphicon glyphicon glyphicon-edit"></span>
</button>
</td>
</tr>
}
}
</tbody>
</table>
Метод моего контроллера:
[HttpPost]
public ActionResult Update(ProductLogicViewModel productLogicViewModel)
{
// productLogicViewModel has empty values
}