Опубликовать прохождение нулевого значения модели и как правильно удалить или исправить это? - PullRequest
0 голосов
/ 15 октября 2018

Пример вывода при отправке кнопки,

enter image description here

enter image description here

Не знаюзнаю, почему у меня есть нулевое значение, вот мой образец формы.подробности из него - частичное представление

enter image description here

Код частичного просмотра

        @model SimplyAccounting.Models.TransactionViewModels.JournalDetailsViewModel
        @using (Html.BeginCollectionItem("JournalDetailsViewModel"))
        {
            <tr class="checkDetails" id="@Model.Guid">
                <td>

        //code here
    <td>
<tr class="DocumentDetails" id="@Model.Guid">
                <div class="btn-group btn-group-toggle">
                    <button type="button" class="btn btn-sm btn-info btnModal" guid="@Model.Guid"><i class="far fa-file"></i></button>
                    <button type="button" class="btn btn-sm btn-danger" id="delete" name="delete" value="delete" onclick="javascript: deleteBook(document.getElementById('@Model.Guid'))"><i class="far fa-trash-alt"></i></button>
                </div>
            </td>
</tr>
        }

Замечу, нулевое значение будет отображаться, еслиЯ добавил новую строку и удалил ее.Если я добавлю еще 2 строки и удалю 2 строки, 2 пустых значения также покажут

Код при добавлении строки

function GetRow() {
        var form = $('form');
        var urlStr = '@Url.Action("CreateJournalDetails", "Journals")';
        $.ajax({
            url: urlStr,
            success: function (data) {
                $('#journalRow').append('<tr>' + data + '</tr>');
                $('tbody#journalRow>tr.checkDetails').appendTo('#checkRow');
                form.data('validator', null);
                $.validator.unobtrusive.parse(form);
            }
        });
    }

Код для удаления строки:

function deleteBook(bookDiv) {
        var id = $(bookDiv).attr("id");
        var cnt = document.getElementsByClassName("DocumentDetails").length;
        if (cnt > 2) {
            bookDiv.remove();
            document.getElementById(id).remove();
        }
    }

Контроллер:

public IActionResult CreateJournalDetails(JournalDetailsViewModel vmodel)
    {
        vmodel = new JournalDetailsViewModel();
        vmodel.Gla_List = GlaList();
        vmodel.Function_List = FunctionList();
        vmodel.Expense_List = ExpenseList();
        vmodel.Bank_List = BankList();
        vmodel.Location_List = LocationList();
        vmodel.Branch_List = BranchList();
        vmodel.Asset_List = AssetList();
        vmodel.Item_List = ItemList();

        return PartialView("_JournalDetails", vmodel);
    }

1 Ответ

0 голосов
/ 15 октября 2018

Теперь, когда вы на стороне сервера, вы можете просто удалить нулевые элементы из вашей модели представления в новый список и добавить новый список в свой контекст.

Вы всегда должны предполагать, что данные из сообщения могутбыть неправым / манипулировать, и вы должны как можно больше проверять данные, которые вы получаете в своем посте.Поэтому, даже если вы исправите это во внешнем интерфейсе, вы должны убедиться, что возвращаемые данные верны.

Тем не менее, это здесь должно решить вашу проблему.

var newViewModel = new List<JournalDetails>();
foreach (var item in newViewModel.JournalDetailsViewModel)
{
    if (item != null)
    {
        ...
        newViewModel.Add(item);
    }
}

var dtails = _mapper.Map<List<JournalDetails>>(newViewModel.JournalDetailsViewModel);
_context.AddRange(newViewModel);

...
...