提交按钮时的示例输出,
我不知道为什么我具有空值,这是我的示例表格。细节来自局部视图
部分查看代码
@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>
}
我注意到,如果添加新行并将其删除,则将显示null值。如果我再添加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);
}
答案 0 :(得分:2)
现在,当您在服务器端时,只需将视图模型中的空项目删除到新列表中,然后将新列表添加到上下文中即可。
您应始终假设帖子中的数据可能是错误的/被篡改的,并且应尽可能验证帖子中获取的数据。因此,即使您在前端对其进行了修复,也应确保获取的数据有效。
也就是说,这应该可以解决您的问题。
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);
...