无效操作异常:传入 ViewDataDictionary 的模型项属于类型

Invalid Operation Exception: The model item passed into the ViewDataDictionary is of type

当我将 Type Model 的 table(Tips) 中的数据列为 partialView 时出现此错误。

InvalidOperationException: The model item passed into the ViewDataDictionary is of type 'System.Collections.Generic.List1[RealEstateAspNetCore3._1.Models.Advertisement]', but this ViewDataDictionary instance requires a model item of type 'System.Collections.Generic.IEnumerable1[RealEstateAspNetCore3._1.Models.Tip]'.

table Tip(类型)包含 StatusId 作为外键。

Tip.cs 型号 class:

    [Key] 
    public int TypeId { get; set; }
    public string TypeName { get; set; }
    public int StatusId { get; set; }
    public virtual Status Status { get; set; }

Status.cs

    [Key] 
    public int StatusId { get; set; }
    public string StatusName { get; set; }
    public List<Tip> Tips { get; set; }

advertisement.cs

    [Key]
    public int AdvId { get; set; }       
    public string Description { get; set; }
    public int StatusId { get; set; }
    public int TypeId { get; set; }
    [ForeignKey("TypeId")]
    public Tip Tip { get; set; }

家庭控制器

public PartialViewResult StatusName1()
{
    string statusname1 = _context.Tips.Where(i => i.StatusId == 1)
                                      .FirstOrDefault()
                                      .ToString();
    return PartialView(statusname1);
}

部分视图 StatusName1:

@model RealEstateAspNetCore3._1.Models.Tip

 <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button">
  @Model.Status.StatusName <span class="caret"></span> </a>

Index.cshtml 在索引中我列出了广告 tables 并且效果很好,我使用了如下模型

@model IEnumerable<RealEstateAspNetCore3._1.Models.Advertisement>
  

在我像这样调用上面的部分 RenderBoy 之后在布局中出现错误

 <partial name="StatusName1" />

我花了两天时间试图解决这个问题,但错误仍然存​​在。

谢谢

我假设你的部分视图名称是 StatusName1

像下面这样更改您的代码:-

public IActionResult StatusName1()
{
    var status1 = _context.Tips.Where(i => i.StatusId == 1)
                                      .FirstOrDefault();

    return PartialView("StatusName1",status1);
}

它将解决您的问题。

更新

在 MVC 核心中您需要使用 ViewComponent 而不是部分视图。

创建一个名为 Components 的文件夹 class 必须继承自 ViewComponent。我会给这个组件class name CategoryWiseMenu


namespace DigitalShop.Components
{
    public class CategoryWiseMenu:ViewComponent
    {
       private readonly ApplicationDbContext _db;

        public CategoryWiseMenu(ApplicationDbContext db)
        {
            _db = db;
        }

        public IViewComponentResult Invoke()
        {
            var c = _db.Tips.Where(i => i.StatusId == 1)
                                      .FirstOrDefault();
            return View("Default.cshtml",c);
        }
    }
}

~/Views/Shared/Components/Default.cshtml

像上面的路径一样在 Components 文件夹中创建 Default.cshtml

演示Default.cshtml

<ul class="navbar-nav flex-grow-1">


    @foreach (var rr in Model)
    {
        <li class="nav-item text-dark">
            <a asp-controller="" asp-action=""
                class="nav-link text-dark">@rr.TypeName</a>
        </li>
    }
    
</ul>

现在在您的布局页面中包含以下代码。

@await Component.InvokeAsync("CategoryWiseMenu")

现在它可以正常工作了。

如果您在需要引用视图的完整路径时从 _Layout.cshtml 调用局部视图:

<partial name="~/Views/Home/StatusName1.cshtml" />

将 Views/Home 替换为项目中的任何文件夹名称。在此处查看更多信息:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-5.0#partial-tag-helper

你提供的片段中有模型和一大堆其他问题 - 我认为@pritom-sarkar 的回答已经解决了大部分问题