2011-10-17 77 views
1

我不斷收到一個錯誤,指出:MVC控制器和存儲庫模型

傳遞到字典的模型項的類型爲「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); 
     } 
    } 
+0

你真的應該開始張貼前接受了一些答案更多... – James

回答

1

簡單的,只需傳入正確類型的模型/類。如果你一定要通過一個ProductRepository型號,然後改變你的瀏覽頁面是第一線......

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

另外,如果你想通過產品,那麼你需要返回,在你的控制器動作。 (在進一步閱讀中更可能是您正在嘗試執行的操作)

注意「繼承」屬性正在設置您想要傳遞的模型類型。

還要注意,一般不希望把庫中的文件夾控制器 - 最好記住這只是控制器類;)

+0

基於對他的行動的代碼,我認爲他的意圖是產品傳遞給視圖 - 不是他的整個存儲庫。 –

+0

@JustinRusbatch:是的,我在我的帖子中發表了評論。無論哪種方式,我想我解釋了爲什麼錯誤發生,這是一個有益的補充,只是糾正他們的代碼;) – musefan

6

您在返回查看存儲庫中沒有的產品。它改成這樣:

var product = repo.GetProductID(id); 

return View(product); 
+0

甚至更​​短的'返回視圖(repo.GetProductID(id));' – James

+0

@詹姆斯甚至更短'返回視圖(new ProductRepository()。GetProductID(id));';-) –

+2

@James,或者甚至更短...''''我們應該使存儲庫靜態保存另外3個字母? ;) – musefan