«ошибка CS0103: имя« w »не существует в текущем контексте» в лямбда-выражении LINQ - PullRequest
1 голос
/ 04 мая 2019

В школьном проекте я создал список дел в 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));
}

1 Ответ

0 голосов
/ 07 мая 2019

ЗДЕСЬ

Я изменил метод из хранилища на:

public Task<List> FindList(int id)
{
     return GetAllLists().Include("Widget")
     .Where(w => w.ListId == id)
     .FirstAsync();
}

Таким образом, разница заключалась в том, что сначала включали, но также использовали вместо этого .

Кроме того, я не использовал правильный идентификатор для маршрутизации в правильную группу, но я понял это перед использованием связанного Включить . Я не знаю, почему использование этой версии имело значение.

Это предложение действительно было сделано кем-то через несколько минут после того, как я сделал сообщение, но, как я хотел ответить, сообщение было удалено.

...