В школьном проекте я создал список дел в ASP.Net Core, где я использую одно частичное представление для списка всех элементов и одно частичное представление для обработки формы «добавить новый элемент». Все обновляется «динамически» с помощью AJAX, например this . Все отлично работает как на одной странице.
Сайт содержит несколько виджетов, и один из них - список дел. При попытке добавить список дел в качестве виджета на приборной панели, мы берем существующий код и помещаем его в частичное представление и загружаем все виджеты в меньшие поля перетаскивания.
В данный момент это выглядит великолепно, но есть проблема с списком дел, когда я вызываю конкретное действие контроллера для создания нового элемента.
Проблема возникает, когда действие вызывает этот метод:
public Task<List> FindList(int id)
{
return GetAllLists().Where(w => w.WidgetId == id).Include(w => w.Widget).FirstAsync();
}
где GetAllLists:
public IQueryable<List> GetAllLists()
{
return _db.Lists.AsQueryable();
}
Содержимое частичного представления для виджета:
@using Weplanner_core.Models.Database
@model Weplanner_core.Models.Database.List
@if (Model != null)
{
if (Model.ListItems == null)
{
@:<p>list items == null</p>
}
else
{
<h2>@Model.Title - @Model.ListType</h2>
<div id="tableDiv">
<partial name="~/Views/List/_ListItemsTable.cshtml" for="@Model" />
</div>
<div id="listItemCreateFrom" class="newListItemDiv">
@{
var newListItem = new ListItem();
}
<partial name="~/Views/List/_ListItemCreateForm.cshtml" for="@newListItem" />
@*@await Html.PartialAsync("~/Views/List/_ListItemCreateForm.cshtml", new ListItem())*@
</div>
@*<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>*@
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
}
}
else
{
@:<p>model is null</p>
}
Ошибка выглядит так при отладке:
http://prntscr.com/nka673
Я пытался создать выражение LINQ с другими переменными, я пытался вызывать другие методы БД в действии контроллера, я пытался загрузить частичное представление _ListItemCreateForm.cshtml, ожидая Html.PartialAsync, я пытался скопировать точный код из исходного файла в частичный вид. Я попытался поместить частичное представление в другую папку, я попытался поместить метод LINQ в другой файл.
Когда это не работает, я получаю сообщение об ошибке в браузере: http://prntscr.com/nk9zy1
Я не могу понять, что должно быть причиной ошибки. У кого-нибудь есть предложения, как получить функционал добавления нового элемента для работы?
EDIT
Содержимое действия контроллера, ListItemsAjaxCreate , в ListController:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> ListItemsAjaxCreate(int? id, [Bind("ItemText")] ListItem listItem)
{
if (id == null)
{
return NotFound();
}
if (!ModelState.IsValid) return PartialView("_ListItemsTable", await listRepo.FocusedList((int) id));
var list = await listRepo.FindList((int) id);
listItem.ListId = (int)id;
listItem.IsDone = false;
listItem.CreatedDate = DateTime.Now;
listItem.List = list;
var user = db.Users.FirstOrDefault(u => u.Id == GetCurrentUserId());
if (user != null) listItem.ItemDetails = user.Email;
try
{
listRepo.AddListItem(listItem);
await db.SaveChangesAsync();
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
return PartialView("_ListItemsTable", await listRepo.FocusedList((int)id));
}