Модель контроллера и репозитория MVC - PullRequest
1 голос
/ 17 октября 2011

Я получаю сообщение об ошибке, в котором говорится:

Элемент модели, переданный в словарь, имеет тип 'HomebaseSystemNew.Controllers.ProductRepository', но для этого словаря требуется элемент модели типа '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); 
        } 
  }

Ответы [ 2 ]

6 голосов
/ 17 октября 2011

Вы возвращаете хранилище в представлении, а не в продукте. Измените это на это:

var product = repo.GetProductID(id);

return View(product );
1 голос
/ 17 октября 2011

Легко, просто введите правильный тип модели / класса. Если вы определенно хотите передать модель ProductRepository, измените первую строку вашей страницы просмотра на ...

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

В качестве альтернативы, если вы хотите передать Продукт, вам нужно вернуть его в действии вашего контроллера. (Что при дальнейшем чтении более вероятно, что вы пытаетесь сделать)

Обратите внимание, что свойство "Inherits" устанавливается с типом модели, который вы хотите передать.

Также обратите внимание, что вы обычно не хотите помещать репозитории в вашу папку контроллера - лучше всего сохранить это только для классов контроллера;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...