Я новичок в 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>
Большое спасибо за потраченное время.