【问题标题】:Requiring different model type, ASP.NET MVC需要不同的模型类型,ASP.NET MVC
【发布时间】:2020-04-03 06:21:21
【问题描述】:

这是我得到的错误:

InvalidOperationException:传入的模型项 ViewDataDictionary 的类型为“ProjectOne.Data.ProjectOneContext”,但 此 ViewDataDictionary 实例需要类型为模型项 'ProjectOne.ViewModel.ItemViewModel'。

它可能相关也可能不相关,但如果不直接在我的代码中输入 OnConfiguring 行,我什至无法连接到数据库。我通常可以将它放在 User Secrets、appsettings.json 或单独的类文件中。但它至少在 appsettings.json 中不起作用。

我不确定这里到底发生了什么。我将在下面发布我的代码。

有人可以帮我解决这个问题吗?谢谢!

DBContext:

namespace ProjectOne.Data
{
    public class ProjectOneContext : DbContext
    {
        public ProjectOneContext(){}
        public ProjectOneContext(DbContextOptions<ProjectOneContext> options) : base(options){}

        public DbSet<ProjectOne.Models.Categories> Categories { get; set; }

    }
}

ItemViewModel:

@model ProjectOne.ViewModel.ItemViewModel
@{
    ViewBag["Title"] = "Index";
}

<h1>Index</h1>

<div class="container">
    <div class="col-md-4">
        <div class="form-group">
            Category:
            @Html.DropDownListFor(expression: model => model.CategoryId, new SelectList(Model.CategorySelectListItem, dataValueField: "Value", dataTextField: "Text"), htmlAttributes: new { @class = "form-control" })
        </div>
    </div>
    <div class="col-md-4">
        <div class="form-group">
            Item Code:
            @Html.TextBoxFor(expression: model => model.ItemCode, htmlAttributes: new { @class = "form-control" })
        </div>
    </div>
    <div class="col-md-4">
        <div class="form-group">
            Item Name:
            @Html.TextBoxFor(expression: model => model.ItemName, htmlAttributes: new { @class = "form-control" })
        </div>
    </div>
    <div class="col-md-4">
        <div class="form-group">
            Description:
            @Html.TextBoxFor(expression: model => model.Description, htmlAttributes: new { @class = "form-control" })
        </div>
    </div>
    <div class="col-md-4">
        <div class="form-group">
            Item Price:
            @Html.TextBoxFor(expression: model => model.ItemPrice, htmlAttributes: new { @class = "form-control" })
        </div>
    </div>
    <div class="col-md-4">
        <div class="form-group">
            Image Path:
            @Html.TextBoxFor(expression: model => model.ImagePath, htmlAttributes: new { type = "file", @class = "form-control" })
        </div>
    </div>
</div>

物品控制器:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using ProjectOne.Data;
using ProjectOne.ViewModel;

namespace ProjectOne.Controllers
{
    public class ItemController : Controller
    {
        private readonly ProjectOneContext objECartDBEntities;

        public ItemController()
        {
            objECartDBEntities = new ProjectOneContext();
        }

        public IActionResult Index()
        {
            ItemViewModel objItemViewModel = new ItemViewModel();
            objItemViewModel.CategorySelectListItem = (from objCat in objECartDBEntities.Categories
                                                       select new SelectListItem()
                                                       {
                                                           Text = objCat.CategoryName,
                                                           Value = objCat.CategoryId.ToString(),
                                                           Selected = true

                                                       });
            return View(objECartDBEntities);
        }
    }
}

【问题讨论】:

  • 我认为您的意思是返回 return View(objItemViewModel); 而不是整个 DbContext 派生类。
  • 就是这样,谢谢!

标签: c# asp.net asp.net-mvc model-view-controller


【解决方案1】:

您的剃须刀页面需要此模型:

ItemViewModel

@model ProjectOne.ViewModel.ItemViewModel

并且您将其传递给查看:

return View(objECartDBEntities);

在 ProjectOneContext 下

你应该返回 ItemViewModel

 return View(objItemViewModel);

永远不要返回这个ProjectOneContext,因为它包含敏感数据.. 你应该返回一个只返回你的页面需要的数据的自定义模型

【讨论】:

    猜你喜欢
    • 2019-09-10
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    相关资源
    最近更新 更多