2013-03-07 66 views
3

在我的控制器Index操作使用下面的代碼,我嘗試在Razor視圖中顯示2項字段內容:MVC 4 - 如何返回LINQ到實體查詢結果在視圖

public class MyController : Controller 
{ 
    private MyEntities db = new MyEntities(); 
    public ActionResult Index() 
     { 
     IEnumerable<Prod> signatures = from Prod in db.Products 
             select new Prod(Prod.ProductID, Prod.ProductName); 
     } 
} 

以前我有在創建模型文件夾中的類,並把它命名爲「PROD」:

public class Prod 
{ 
    public int ProductID { get; set; } 
    public string ProductName { get; set; } 
} 

但是當我運行的項目,我倒在一個錯誤:

MyProject.Controllers.MyController.Index() 

並非所有的代碼路徑返回一個值

任何幫助嗎?

+0

返回查看(簽名)通常被使用,只是在你的問題中顯示視圖。 – 2013-03-07 14:11:21

+0

開始的好地方是http://asp.net/mvc – jrummell 2013-03-07 14:17:47

+0

@ jrummell,值得注意的是,謝謝。 – 2013-03-07 14:20:03

回答

4

薩米-L,你的刺類不會有專門的構造函數,即接受一些初始化值的構造函數。你的行動應該是這樣的:。

public ActionResult Index() 
{ 
    IEnumerable<Prod> signatures = from p in db.Products 
            select new Prod 
            { 
             ProductId = p.ProductID, 
             ProductName = p.ProductName 
            }; 
    return View(signatures); 
} 

注意在大括號「{」,而不是「(」括號這將有助於解決您所得到的構造錯誤

更新:我已經更名爲您的LINQ查詢參數從Prodp。使用PROD您指定由編譯器的方式認爲你的產品ID和產品名稱是靜態的性質。通過重命名from之後的參數這應該有助於解決這一問題。

+0

我試過了你的建議並得到錯誤\t **一個對象非靜態字段,方法或屬性'MyProject.Models.Prod.ProductID'需要引用。得到'** – 2013-03-07 14:29:07

+1

檢查我的更新部分。 – 2013-03-07 14:40:33

+0

就是這樣@Husein,非常感謝。 – 2013-03-07 14:48:08

3

我想你只是想念return聲明。

public ActionResult Index() 
{ 
    IEnumerable<Prod> signatures = from Prod in db.Products 
             select new Prod(Prod.ProductID, Prod.ProductName); 
    return View(signatures); // this is missing 
} 
+0

@David,當然這是一個愚蠢的錯誤,我用**返回查看(簽名)**;它的工作,但後來在視圖級別的下一個錯誤:「**只有無參數的構造函數和初始化支持LINQ to實體**」錯誤點在** @ foreach(模型中的var項)**,請親切地因爲我是MVC的新手,所以幫助我解決這個問題。 – 2013-03-07 14:09:26

+0

@ Sami-L在你的'產品'實體中添加一個無參數的構造函數(如果你不想公開它,你可以保護它) – 2013-03-07 14:10:59

+0

@DavinTryon,返回的簽名返回一個IEnumerable類型的對象而不是繼承的對象來自ActionResult。 – 2013-03-07 14:12:15

3

你缺少return元素。您需要將其包裝在View中,以便您的索引剃鬚刀視圖將通過Prod列表。

public ActionResult Index() 
{ 
    IEnumerable<Prod> signatures = from Prod in db.Products 
            select new Prod(Prod.ProductID, Prod.ProductName); 
    return View(signatures); // add this 
} 

在Index.cshtml你也可以申報模式,使視圖是強類型,即

@model IEnumerable<MyProject.Models.Prod> 

<table> 
    @foreach(var prod in Model) 
    { 
    <tr> 
     <td>@prod.ProductID</td> 
     <td>@prod.ProductName</td> 
    </tr> 
    } 
</table>