Razor MVC4-如何在视图中返回linq到实体查询结果

Razor MVC4-如何在视图中返回linq到实体查询结果,razor,asp.net-mvc-4,linq-to-entities,entity-framework-5,Razor,Asp.net Mvc 4,Linq To Entities,Entity Framework 5,使用控制器索引操作中的下一个代码,我尝试在razor视图中显示两个字段内容: public class MyController : Controller { private MyEntities db = new MyEntities(); public ActionResult Index() { IEnumerable<Prod> signatures = from Prod in db.Products

使用控制器索引操作中的下一个代码,我尝试在razor视图中显示两个字段内容:

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);
      }
}
但当我运行该项目时,我遇到了下一个错误:

MyProject.Controllers.MyController.Index()
并非所有代码路径都返回值


有什么帮助吗?

我想你只是缺少了
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
}
public ActionResult Index()
{
IEnumerable signatures=来自数据库产品中的产品
选择新产品(Prod.ProductID,Prod.ProductName);
返回视图(签名);//缺少此项
}

您缺少
返回
元素。您需要将其包装在一个
视图中
,这样您的Index razor视图将被传递到Prod列表中

public ActionResult Index()
{
    IEnumerable<Prod> signatures = from Prod in db.Products
                                   select new Prod(Prod.ProductID, Prod.ProductName);
    return View(signatures);  // add this
}
public ActionResult Index()
{
IEnumerable signatures=来自数据库产品中的产品
选择新产品(Prod.ProductID,Prod.ProductName);
返回视图(签名);//添加此
}
在Index.cshtml中,您还可以声明模型,以便视图是强类型的,即

@model IEnumerable<MyProject.Models.Prod>

<table>
  @foreach(var prod in Model)
  {
    <tr>
      <td>@prod.ProductID</td>
      <td>@prod.ProductName</td>
    </tr>
  }
</table>
@model IEnumerable
@foreach(模型中的var prod)
{
@产品ID
@prod.ProductName
}

Sami-L,您的Prod类没有专门的构造函数,即接受某些初始化值的构造函数。你的行动应该是这样的:

public ActionResult Index()
{
    IEnumerable<Prod> signatures = from p in db.Products
                                    select new Prod
                                    {
                                        ProductId = p.ProductID, 
                                        ProductName = p.ProductName
                                    };
    return View(signatures); 
}
public ActionResult Index()
{
IEnumerable signatures=来自p,单位为db.Products
选择新产品
{
ProductId=p.ProductId,
ProductName=p.ProductName
};
返回视图(签名);
}
请注意大括号“{”而不是“(”大括号)。这将有助于解决您遇到的构造函数错误


更新:我已将LINQ查询中的一个参数从
Prod
重命名为
p
。以您指定的方式使用Prod使编译器认为您的ProductID和ProductName是静态属性。通过将参数重命名为
from
之后,这将有助于解决问题。

@David,是的,当然这是一个愚蠢的错误,我使用了返回视图(签名);它工作了,但在视图级别出现了下一个错误:“LINQ to Entities中只支持无参数构造函数和初始值设定项”。错误点在@foreach(模型中的var项),请帮助我解决这个问题,因为我是MVC新手。@Sami-L向您的
产品
实体添加一个无参数构造函数(如果您不想公开它,可以将其设置为受保护)@Davintroon,return signatures返回IEnumerable类型的对象,而不是从ActionResult继承的对象。@Husein,那么最后该怎么办?我的视图顶部有这样一个内容:@model IEnumerableCheck out my answer@Sami Lreturn view(签名)通常使用,只需在问题中显示视图即可。一个很好的起点是@jrummell,注意到了,谢谢。我已经尝试了您的建议,但发现错误,非静态字段、方法或属性“MyProject.Models.Prod.ProductID.get”需要对象引用,就是这样@Husein,非常感谢。
public ActionResult Index()
{
    IEnumerable<Prod> signatures = from p in db.Products
                                    select new Prod
                                    {
                                        ProductId = p.ProductID, 
                                        ProductName = p.ProductName
                                    };
    return View(signatures); 
}