Html Помощник «Действие» не определен, Asp.NET Core 2.2 - PullRequest
0 голосов
/ 24 октября 2018

Я новичок в MVC и .NET Core.Я предрежу этот вопрос, сказав, что я прочитал другие подобные вопросы, но они не были той же самой проблемой, с которой я столкнулся.

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

Когда я вызываю @Html.Action("NavMenu", "Nav") в моем "_Layout.cshtml", я получаю ошибку

Ошибка CS1929: «IHtmlHelper» не содержит определения для «Действие 'и лучшая перегрузка метода расширения' UrlHelperExtensions.Action (IUrlHelper, string, object) 'требует получателя типа' IUrlHelper '

Один из других подобных вопросов привел меня к добавлению @using System.Web.Mvc.Htmlк началу моего «_ViewImports», и это приводит к ошибке:

CS7069: ссылка на тип «RouteValueDictionary». Утверждает, что он определен в «System.Web», но не может быть найден

Также ответ сказал, что @html.Action() должен быть встроен в Core 2.0

, с использованием @await Html.PartialAsync("_SideNav") работает только в моем представлении индекса, так как это представление имеет @model IEnumerable<HSCWebApp.Models.HSCTable>, но другие мои представлениянужно @model HSCWebApp.Models.HSCTable, что приводит к сбою "_SideNav"

Я на 100% открыт для других способов реализации этого.

В NuGet я установил:

-EntityFramework

-Microsoft.AspNet.Mvc

-Microsoft.AspNetCore.App

-Microsoft.NETCore.App

ПРАВКА:

Я также получаю эти предупреждения во время сборки:

Предупреждение Пакет NU1701 «Microsoft.AspNet.Mvc 5.2.2» был восстановлен с использованием «.NETFramework, Version = v4.6.1» вместо цели проектафреймворк .NETCoreApp, версия = v2.1.Этот пакет может быть не полностью совместим с вашим проектом.

вместе с пакетами для Entity Framework, 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;
            //Ienumberable<NavViewModel> en = navList;
            //Ienumberable<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>

Большое спасибо за потраченное время.

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

«Публикация в качестве ответа».

Как я уже сказал, Html.Action был удален из ASP.NET Core и заменен на ViewComponents.

В Microsoft Docs есть хорошее руководство, вы можете увидеть здесь .Объясняя преимущества, место, где вы можете поместить View для вашего ViewComponent, как использовать параметры и т. Д.

0 голосов
/ 24 октября 2018

Как сказал @Tiago Avila, Html.Action было удалено из Asp.NET Core, поэтому я перестал пытаться делать это с @html.action, а с View Components, как предложил @Llazar, и это сработало!

My View Component:

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")

Больше ничего не нужно было менять.Спасибо за вашу помощь!

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