Получение пустых значений параметров в контроллере после публикации сериализованной ViewModel - PullRequest
0 голосов
/ 26 марта 2019

У меня есть немного сложная ViewModel, которая имеет атрибуты Enum, List и т. Д. Поэтому я хочу сериализовать все данные и передать их контроллеру.

Я перечисляю все элементы модели представлений на столе. Почти все поля доступны для редактирования. Я изменяю некоторые поля строки и нажимаю кнопку сохранения в конце строки. Но когда я нажимаю кнопку сохранения, я вижу, что мой параметр пуст в контроллере.

Вот снимок моей страницы.

enter image description here

Моя 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
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...