Html Helper“操作”未定义,Asp.NET Core 2.2

2024-05-20

我是 ASP.NET Core MVC 的新手。我会在这个问题前说我已经阅读了其他类似的问题,但它们与我遇到的问题并不完全相同。

我正在尝试实现动态左侧导航,其中每个按钮都是从我的数据库加载的。

当我打电话时@Html.Action("NavMenu", "Nav")在我的“_Layout.cshtml”中我收到错误

错误CS1929
“IHtmlHelper”不包含“Action”的定义,并且最佳扩展方法重载“UrlHelperExtensions.Action(IUrlHelper, string, object)”需要“IUrlHelper”类型的接收器

其他类似的问题之一让我添加@using System.Web.Mvc.Html到我的“_ViewImports”的顶部,这会导致错误:

CS7069:对类型“RouteValueDictionary”的引用声称它是在“System.Web”中定义的,但找不到

答案还说@html.Action()应内置于 Core 2.0 中

using @await Html.PartialAsync("_SideNav")仅适用于我的索引视图,因为该视图具有@model IEnumerable<HSCWebApp.Models.HSCTable>但我的其他观点需要@model HSCWebApp.Models.HSCTable,这会导致“_SideNav”崩溃

我对实现这一目标的其他方法持 100% 的开放态度。

在 NuGet 中我安装了:

  • 实体框架
  • 微软.AspNet.Mvc
  • 微软.AspNetCore.App
  • 微软.NETCore.App

EDIT:

我还在构建过程中收到这些警告:

警告 NU1701 包“Microsoft.AspNet.Mvc 5.2.2”已使用“.NETFramework,Version=v4.6.1”而不是项目目标框架“.NETCoreApp,Version=v2.1”恢复。该包可能与您的项目不完全兼容。

以及实体框架、AspNet.Razor AspNet.Webpages

这些警告会以某种方式影响我的参考吗?


以下是文件:

控制器:(“NavController.cs”)

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using HSCWebApp.Models;
using Microsoft.EntityFrameworkCore;

namespace HSCWebApp.Controllers
{
    public class NavController : Controller
    {

        private readonly HSCWebAppContext _context;

        public NavController(HSCWebAppContext context)
        {
            _context = context;
        }
        public ActionResult NavMenu()
            {
            
            NavViewModel nav = new NavViewModel();
            List<NavViewModel> navList = new List<NavViewModel>();

            var items = from n in _context.HSCTable select n;
            List<HSCTable> tableList = items.ToList<HSCTable>();


            for (int i = 0; i < tableList.Count(); i++)
            {
                nav.Id = tableList[i].ID;
                nav.DepartmentName = tableList[i].DepartmentName;
                nav.sel = tableList[i].sel;
                navList.Add(nav);
            }


            //var movies = from m in _context.Movie select m;
            //IEnumerable<NavViewModel> en = navList;
            //IEnumerable<HSCTable> en = tableList;

            return PartialView("_SideNav", tableList);
            }
        
    }
}

模型:(“NavViewModel.cs”)

    using System.ComponentModel.DataAnnotations.Schema;
    namespace HSCWebApp.Models
    {
        [Table("HSCTable")]
        public class NavViewModel
        {
            public NavViewModel(){
                int Id = this.Id;
                string DepartmentName = this.DepartmentName;
                string sel = this.sel;
                }
            public int Id { get; set; }
            public string DepartmentName { get; set; }
            public string sel { get; set; }
        }
    }

查看:(“_SideNav.cshtml”)

@model IEnumerable<HSCWebApp.Models.HSCTable>
@using System;
@using System.Collections;
@using System.Linq;

@{

    List<List<string>> navButtons = new List<List<string>>();
    int listIndex = 0;
    int INITIAL = 0;

    navButtons.Add(new List<string>());
    navButtons[listIndex].Add("");

}


<body>
    <div class="sidenav">
        @{

            foreach (var item in Model)
            {

                if (navButtons[listIndex][INITIAL].Equals(null) 
                    || navButtons[listIndex][INITIAL].Equals("")) 
                {
                    // if the list of lists is empty, add the department name
                    //initialize the list with with the department name
                    navButtons[listIndex][INITIAL] = item.DepartmentName;
                    //add the current select
                    navButtons[listIndex].Add(item.sel);
                }
                else if (navButtons[listIndex][INITIAL].Equals(item.DepartmentName)) 
                {
                    // if the current item's department name is the same 
                    // is the current list's department name, 
                    // add it's selectn
                    navButtons[listIndex].Add(item.sel);
                }
                else if (!item.DepartmentName.Equals(navButtons[listIndex][INITIAL]))
                {
                    // if the current item's department name 
                    // is not the same as the initial of this list, 
                    // create new list
                    navButtons.Add(new List<string>());
                    listIndex++;
                    navButtons[listIndex].Add(item.DepartmentName);
                    navButtons[listIndex].Add(item.sel);
                }
            }





            for (int i = 0; i < navButtons.Count; i++)
            {
                <button class="accordion"
                        onclick="openAccordion(this)">
                     @navButtons[i][INITIAL]
                </button>
                <div class="tab">
                    @for (int j = 1; j < navButtons[i].Count; j++)
                    {
                        <a class="tabLinks NoPrint" 
                           onclick="openTab(this)" 
                           asp-action="Details" 
                           asp-route-id="@navButtons[i][j]">
                              @navButtons[i][j].ToString() 
                        </a>
                    }
                </div>
            }

          //          @Url.Action("Details", "HSCTables", new { id = 1 })
          //onclick = "location.href='@Url.Action("Details","HSCTables", new { id = 1 })

        }

    </div>
</body>

非常感谢您的宝贵时间。


正如@Tiago Ávila 所说,Html.Action已从 Asp.NET Core 中删除,因此我停止尝试使用@html.action而是使用视图组件,正如 @Llazar 建议的那样,而且它有效!

我的视图组件:

public class NavViewComponent : ViewComponent
    {

        private readonly HSCWebAppContext _context;

        public NavViewComponent(HSCWebAppContext context)
        {
            _context = context;
        }

        public IViewComponentResult Invoke()
        {

            NavViewModel nav = new NavViewModel();
            List<NavViewModel> navList = new List<NavViewModel>();

            var items = from n in _context.HSCTable select n;
            List<HSCTable> tableList = items.ToList<HSCTable>();


            for (int i = 0; i < tableList.Count(); i++)
            {
                nav.Id = tableList[i].ID;
                nav.DepartmentName = tableList[i].DepartmentName;
                nav.sel = tableList[i].sel;
                navList.Add(nav);
            }

            return View("_SideNav",tableList);
        }

    }

我在 _Layout 中的调用:

@await Component.InvokeAsync("Nav")

其他什么都不需要改变。感谢您的帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Html Helper“操作”未定义,Asp.NET Core 2.2 的相关文章

  • 使用 C++ 拆分“[常规设置]”格式的节字符串

    我是 C 新手 我想读取包含部分和键值对的 ini 文件 根据部分 我想读取相应键的值 首先 我想阅读方括号内的部分 请帮忙 谢谢 对于真正的 INI 文件解析 我强烈建议iniparser库 http ndevilla free fr i
  • 使用 JSON 格式正确配置 NLog 到 IHostBuilder

    我有以下代码 应该接受 NLog 的 JSON appsettings 配置 然后使用它来创建 NLog LogFactory 这个 NLog 工厂应该被传递到 MyService 类中 以便在那里创建一个记录器 class Program
  • 每次调用新方法时触发事件

    我正在做一个logger for a c 应用程序需要记录每个方法被调用的时间以及每个方法执行时间 我可以通过调用自己的方法来做到这一点EventLogger LogMethodCall方法在每个方法的开头 但我想知道是否有办法使CLR每次
  • 将 Python 控制台集成到 GUI C++ 应用程序中

    I m going to add a python console widget into a C GUI below some other controls 许多类将暴露给 python 代码 包括一些对 GUI 的访问 也许我会考虑 P
  • Confuser .NET 混淆器。安全吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在开发一个应用程序 其中阻止用户反编译代码非常重要 现在 我意识到 如果由经验丰富的程序员执行 大多数 exe 都是可反编译的
  • C++:将模板参数的模板类型成员添加为好友的正确语法?

    我有一个带有模板类型参数 tTRAIT 的类 我想加一个模板为好友type member aliastTRAIT 但我无法弄清楚语法 这可能吗 template
  • 如何使用boost库读取和写入.ini文件[重复]

    这个问题在这里已经有答案了 如何使用boost库读取和写入 或修改 ini文件 With Boost PropertyTree您可以读取并更新树 然后写入文件 请参阅load and save功能 看一下如何访问属性树中的数据 http w
  • 求一个数的因数。无法得到准确的结果

    有人可以帮助纠正我的算法吗 我已经对几个数字进行了测试 但它没有输出完整的因式分解 对于具有大量因子的数字 它完全失败 int num 20 for int i 2 i lt num i if num i 0 cout lt lt i lt
  • 函数参数评估顺序[重复]

    这个问题在这里已经有答案了 在 C 和 C 中 函数参数的求值是否有固定的顺序 我的意思是 标准怎么说 是吗left to right or right to left 我从书中得到的信息令人困惑 是否有必要function call应该使
  • 捕获另一个进程未处理的异常

    我想知道我是否可以捕获我开始使用 Process Start 的另一个进程抛出的未处理的异常 我知道我可以用这个捕获标准错误link http social msdn microsoft com Forums en US csharpgen
  • Visual Studio Code 调试默认 ASP.NET Core MVC WebApp:不起作用

    我正在使用 Manjaro linux 并尝试调试默认的 ASP NET Core MVC 项目 但调试停止 没有任何错误 我创建了该项目 dotnet new mvc in a Meow文件夹 没什么特别的 然后添加了新的配置 NET C
  • printf() 使用字符串表“解码器环”调试库

    我写这封信是想看看你们中是否有人见过或听说过我即将描述的想法的实现 我有兴趣为嵌入式目标开发 printf 风格的调试库 目标非常遥远 并且我和目标之间的通信带宽预算非常紧张 因此我希望能够以非常有效的格式获取调试消息 通常 调试语句如下所
  • 只读有运行时开销吗?

    出于某种原因 我一直认为readonly字段有与其相关的开销 我认为这是 CLR 跟踪是否存在readonly字段是否已初始化 这里的开销是一些额外的内存使用量 用于跟踪状态以及分配值时的检查 也许我这么认为是因为我不知道readonly字
  • TreeView:仅在子节点中存在复选框

    我需要一个树视图控件 根节点没有复选框 只有图像 所有子节点都有一个复选框 图像 C net 2 0 winforms 不是 wpf WinForms树视图默认不支持混合复选框 非复选框节点 您可以在树视图上全局启用复选框 并使用以下命令在
  • 从 exit() 和 fork() 返回的结果奇怪地发生了位移

    我有一个 C 代码 有时会自行分叉 每个分叉都会执行一些操作 然后返回一个错误代码 目前 每个子进程返回其 ID 0 n void other int numero exit numero int main for int i 0 i lt
  • 将多个对象传递给我的控制器

    我将一个对象传递给我的控制器 如下所示 var form JSON stringify subRevisedRequest frmRevised val subSubcontractor frmSubcontractor val subDe
  • 未找到 _sqlite3_open 等符号错误

    您好 我收到此错误 Undefined symbols sqlite3 open referenced from main in ccRlWVer o sqliite3 close referenced from main in ccRlW
  • 如何在 Winform DataGridView 中创建不同的单元格格式

    我有一个 DataGridView 我将其绑定到 DataTable DataTable 是一个全数字值 要求 DataGridView 中的每 n 行都包含文本 而不是数值 以便在视觉上为用户分隔部分 我很高兴在绑定后将此文本数据放入 D
  • 获取会议组织者邮件地址 EWS API

    我想使用 EWS API 获取会议组织者的邮件地址 目前 我刚刚获得约会项目的一些属性 我听说你可以设置你想要获取哪些属性 我的代码看起来像这样 CalendarView cview new CalendarView start end c
  • 如何从尖点库矩阵格式获取原始指针

    我需要从尖点库矩阵格式获取原始指针 例如 cusp coo matrix

随机推荐