MVC控制器和存储库模型

本文关键字:模型 存储 控制器 MVC | 更新日期: 2023-09-27 18:11:33

我一直得到一个错误说:

传入字典的模型项的类型是"HomebaseSystemNew.Controllers"。productrerepository ',但是这个字典需要一个类型为'HomebaseSystemNew.Models.Product'的模型项

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"           Inherits="System.Web.Mvc.ViewPage<HomebaseSystemNew.Models.Product>" %>

我的库:

  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Web;
  using HomebaseSystemNew.Models;
  namespace HomebaseSystemNew.Controllers
  {
     public class ProductRepository
   {
  public Product GetProductID(int Pid)
    {
        DatabaseLinkedDataContext db = new DatabaseLinkedDataContext();
        return db.Products.FirstOrDefault(ans => ans.Pid == Pid);
    }
    }

我的控制器:

using System.Linq;
using System.Web.Mvc;
using HomebaseSystemNew.Models;

namespace HomebaseSystemNew.Controllers
  {
    public class ProductsController : Controller
 {
       public ActionResult EditProduct(int id)  
       {
             ProductRepository repo = new ProductRepository();
             repo.GetProductID(id);
             return View(repo); 
        } 
  }

MVC控制器和存储库模型

您返回的是View中的存储库,而不是Product。改成这样:

var product = repo.GetProductID(id);
return View(product );

简单,只需传递正确的模型/类类型。如果你确实想传递一个productrerepository Model,那么将View页面的第一行更改为…

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"           Inherits="System.Web.Mvc.ViewPage<HomebaseSystemNew.Controllers.ProductRepository>" %>

或者,如果您想传递Product,那么您需要在控制器操作中返回它。(进一步阅读更有可能是你想要做的)

注意"Inherits"属性是用你想传递的模型类型设置的。

还要注意,你通常不希望将存储库放在控制器文件夹中——最好只保留控制器类;)