2013-03-07 44 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>