Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;错误CS0103:名称';w';“在当前上下文中不存在”;在LINQ lambda表达式中_C#_Linq_Asp.net Core_Razor_Asp.net Core Mvc - Fatal编程技术网

C# &引用;错误CS0103:名称';w';“在当前上下文中不存在”;在LINQ lambda表达式中

C# &引用;错误CS0103:名称';w';“在当前上下文中不存在”;在LINQ lambda表达式中,c#,linq,asp.net-core,razor,asp.net-core-mvc,C#,Linq,Asp.net Core,Razor,Asp.net Core Mvc,在一个学校项目中,我在ASP.NETCore中创建了一个待办事项列表,其中我使用一个局部视图列出所有项目,使用一个局部视图处理“添加新项目”表单。一切都在用类似AJAX的工具“动态”更新。一切都很好,因为它是在一页 该网站包含多个小部件,其中一个是待办事项列表。当尝试将待办事项列表添加为仪表板上的小部件时,我们将现有代码放在部分视图中,并将所有小部件加载到较小的拖放框中 目前看起来不错,但当我调用特定的控制器操作来创建新项时,待办事项列表有一个问题。 当操作调用此方法时会出现问题: public

在一个学校项目中,我在ASP.NETCore中创建了一个待办事项列表,其中我使用一个局部视图列出所有项目,使用一个局部视图处理“添加新项目”表单。一切都在用类似AJAX的工具“动态”更新。一切都很好,因为它是在一页

该网站包含多个小部件,其中一个是待办事项列表。当尝试将待办事项列表添加为仪表板上的小部件时,我们将现有代码放在部分视图中,并将所有小部件加载到较小的拖放框中

目前看起来不错,但当我调用特定的控制器操作来创建新项时,待办事项列表有一个问题。 当操作调用此方法时会出现问题:

public Task<List> FindList(int id)
{
    return GetAllLists().Where(w => w.WidgetId == id).Include(w => w.Widget).FirstAsync();
}
公共任务查找列表(int-id)
{
返回getAllList().Where(w=>w.WidgetId==id).Include(w=>w.Widget).FirstAsync();
}
其中GetAllList是:

public IQueryable<List> GetAllLists()
{
    return _db.Lists.AsQueryable();
}
public IQueryable getAllList()
{
返回_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>
}
@使用Weplanner\u core.Models.Database
@模型Weplanner\u core.Models.Database.List
@如果(型号!=null)
{
if(Model.ListItems==null)
{
@:列表项==null

} 其他的 { @Model.Title-@Model.ListType @{ var newListItem=newListItem(); } @*@等待Html.partialSync(“~/Views/List/\u ListItemCreateForm.cshtml”,new ListItem())*@ @**@ } } 其他的 { @:模型为空

}
调试时出现如下错误:

我尝试使用其他变量生成LINQ表达式,我尝试在控制器操作中调用其他DB方法,我尝试将_ListItemCreateForm.cshtml部分视图加载为wait Html.PartialAsync,我尝试将精确代码从原始文件复制到部分视图。我尝试将局部视图放在另一个文件夹中,我尝试将LINQ方法放在另一个文件中

当它不工作时,我在浏览器中得到错误:

我真的看不出错误的原因是什么。有人对如何使用添加新项目的功能提出了建议吗

编辑

ListController中控制器操作ListItemsAjaxCreate的内容:

[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));
}
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务ListItemsAjaxCreate(int?id,[Bind(“ItemText”)]ListItem ListItem)
{
if(id==null)
{
返回NotFound();
}
如果(!ModelState.IsValid)返回PartialView(_ListItemsTable),则等待listRepo.FocusedList((int)id));
var list=await listRepo.FindList((int)id);
listItem.ListId=(int)id;
listItem.IsDone=false;
listItem.CreatedDate=DateTime.Now;
List=List;
var user=db.Users.FirstOrDefault(u=>u.Id==GetCurrentUserId());
如果(user!=null)listItem.ItemDetails=user.Email;
尝试
{
listRepo.AddListItem(listItem);
等待db.saveChangesSync();
}
捕获(例外e)
{
控制台写入线(e);
投掷;
}
返回PartialView(“_ListItemsTable”,wait listRepo.FocusedList((int)id));
}

点击此处

我将方法从存储库更改为:

public Task<List> FindList(int id)
{
     return GetAllLists().Include("Widget")
     .Where(w => w.ListId == id)
     .FirstAsync();
}
公共任务查找列表(int-id)
{
返回getAllList().Include(“小部件”)
.Where(w=>w.ListId==id)
.FirstAsync();
}
所以区别在于先包含,但也使用了包含

此外,我没有使用正确的ID路由到正确的组,但在使用链接的Include之前,我发现了这一点。我不知道为什么使用这个版本会有不同


这个建议实际上是在我发帖几分钟后有人提出的,但由于我想回复,帖子被删除了。

如果你把
Where()
Include()的位置切换一下,会不会有用?类似于
return getAllList().Include(w=>w.Widget).Where(w=>w.WidgetId==id).FirstAsync()@SergeyKudriavtsev不起作用:但感谢您的建议。浏览器中错误的屏幕截图显示了
ListItemsAjaxCreate
方法上的500个内部服务器错误。这个方法是什么样子的?@hiltononline我已经用这个方法编辑了这篇文章。@Jonafan
return GetAllLists().FirstAsync(w=>w.WidgetId==id)
,然后你应该可以使用
wait listrep.FindList((int)id)访问小部件