首页 > 解决方案 > Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.EnsureCompatible(对象值)

问题描述

这是我得到的错误;请告诉我如何解决它:

InvalidOperationException:传递到 ViewDataDictionary 的模型项的类型为“System.Collections.Generic.List 1[AgricultureFarming.Models.AddToCart]', but this ViewDataDictionary instance requires a model item of type 'System.Collections.Generic.IEnumerable1[AgricultureFarming.Models.Order]”}

我的索引视图页面代码我想在 Addtocart 模型的订单索引页面中显示产品

@model IEnumerable<AgricultureFarming.Models.Order>
    @{
        ViewData["Title"] = "Index";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    <h1>Index</h1>
    
    <p>
        <a asp-action="Create">Create New</a>
    </p>
    <div class="container">
        <div class="row">
            <div>
                <table class="table">
                    <tbody>
                        @foreach (var item in Model)
                        {
                            <tr>
                                <td>
                                    <img src="~/Images/@item.AddToCarts.Products.Image_path" class="img-fluid" style="height:50px;width:85px;" asp-append-version="true" />
                                </td>
                                <td>
                                    <b>
                                        @Html.DisplayFor(modelItem => item.AddToCarts.Products.Product_Name)
                                    </b>
                                </td>
                                <td>
                                    1 KG = @Html.DisplayFor(modelItem => item.AddToCarts.Products.Price)
                                </td>
                                <td>
                                    @Html.DisplayFor(modelItem => item.AddToCarts.Quantity)
                                </td>
                                <td>
                                    @(item.AddToCarts.Quantity* item.AddToCarts.Products.Price)
                                </td>
    
                            </tr>
                        }
                    </tbody>
                    <tfoot>
                        <tr>
                            <td></td>
                            <td></td>
                            <td></td>
                            <td><b>Sub Total</b></td>
                            <td>@Model.Sum(i => i.AddToCarts.Quantity * i.AddToCarts.Products.Price) TK</td>
                        </tr>
                        <tr>
                            <td></td>
                            <td></td>
                            <td></td>
                            <td><b>Delivery Charge</b></td>
                            <td><text id="DeliveryCharge"></text></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td></td>
                            <td></td>
                            <td><b>Total Amount</b></td>
                            <td><text id="Total">@Model.Sum(i => i.AddToCarts.Quantity * i.AddToCarts.Products.Price) TK</text></td>
                        </tr>
                    </tfoot>
    
                </table>
            </div>
            <div class="form-group col-md-3">
    
                <div>
                    <select id="CountryList" class="form-control" asp-items="ViewBag.CountryList"></select>
                </div>
                <div class="form-group col-md-3"></div>
                <div>
                    <select id="CityList" class="form-control"></select>
                    <br />
                    <text>Address:</text>
                    <br />
                    
                    <textarea class="form-control"></textarea>
                </div>
                <div>
                    <text>Zip Code:</text>
                    <br />
                    <input type="text" name="name" value="" class="form-control"/>
                </div>
                
            </div>
        </div>
    </div>
    
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <div class="container">
    
        <div class="row">
    
            <div class="form-group col-md-3 align-self-start">
                <select id="CountryList" class="form-control" asp-items="ViewBag.CountryList"></select>
            </div>
            <div class="form-group col-md-3">
                <select id="CityList" class="form-control"></select>
            </div>
        </div>
    </div>

我的模型课:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace AgricultureFarming.Models
{
    public class Order
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public string Id { get; set; }

        [Display(Name = "Delivery Charge")]
        public int DeliveryChargesId { get; set; }

        [Required]
        public string UserId { get; set; }

        [Display(Name = "Item")]
        public string AddToCartsId { get; set; }

        [Required]
        public string DeliveryAddress { get; set; }

        [Required]
        [Display(Name = "Total Price")]
        [Column(TypeName = "decimal(10,2)")]
        public decimal TotalAmount { get; set; }

        [Required]
        public DateTime OrderDate { get; set; }

        public DeliveryCharge DeliveryCharges { get; set; }

        public AddToCart AddToCarts { get; set; }
          
    }
}

标签: asp.net-core-mvc

解决方案


Index action返回AddToCart collection类型,因此您的视图应该用于@model AgricultureFarming.Models.AddToCart接收。

为了解决这个问题,改变索引视图代码如下:

@model IEnumerable<AgricultureFarming.Models.AddToCart>

@{
    ViewData["Title"] = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h1>Index</h1>

<p>
    <a asp-action="Create">Create New</a>
</p>
<div class="container">
    <div class="row">
        <div>
            <table class="table">
                <tbody>
                    @foreach (var item in Model)
                    {
                        <tr>
                            <td>
                                <img src="~/pics/@item.Products.Image_path" class="img-fluid" style="height:50px;width:85px;" asp-append-version="true" />
                            </td>
                            <td>
                                <b>
                                    @Html.DisplayFor(modelItem => item.Products.Product_Name)
                                </b>
                            </td>
                            <td>
                                1 KG = @Html.DisplayFor(modelItem => item.Products.Price)
                            </td>
                            <td>
                                @Html.DisplayFor(modelItem => item.Quantity)
                            </td>
                            <td>
                                @(item.Quantity* item.Products.Price)
                            </td>
                        </tr>
                    }
                </tbody>
                <tfoot>
                    <tr>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td><b>Sub Total</b></td>
                        <td>@Model.Sum(i => i.Quantity * i.Products.Price) TK</td>
                    </tr>
                    <tr>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td><b>Delivery Charge</b></td>
                        <td><text id="DeliveryCharge"></text></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td><b>Total Amount</b></td>
                        <td><text id="Total">@Model.Sum(i => i.Quantity * i.Products.Price) TK</text></td>
                    </tr>
                </tfoot>
            </table>
        </div>
        <div class="form-group col-md-3">
            <div>
                <select id="CountryList" class="form-control" asp-items="ViewBag.CountryList"></select>
            </div>
            <div class="form-group col-md-3"></div>
            <div>
                <select id="CityList" class="form-control"></select>
                <br />
                <text>Address:</text>
                <br />

                <textarea class="form-control"></textarea>
            </div>
            <div>
                <text>Zip Code:</text>
                <br />
                <input type="text" name="name" value="" class="form-control" />
            </div>
        </div>
    </div>
</div>

<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="container">

    <div class="row">

        <div class="form-group col-md-3 align-self-start">
            <select id="CountryList" class="form-control" asp-items="ViewBag.CountryList"></select>
        </div>
        <div class="form-group col-md-3">
            <select id="CityList" class="form-control"></select>
        </div>
    </div>
</div>```

这是测试结果:

在此处输入图像描述


推荐阅读