3

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

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()

并非所有代码路径都返回值

请问有什么帮助吗?

4

3 回答 3

4

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); 
}

请注意花括号“{”而不是“(”大括号。这应该有助于解决您遇到的构造函数错误。

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

于 2013-03-07T14:20:08.693 回答
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
}
于 2013-03-07T14:02:15.147 回答
3

您缺少return元素。您需要将其包装在 a 中View,以便您的 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
}

在 Index.cshtml 中,您还可以声明模型,以便视图是强类型的,即

@model IEnumerable<MyProject.Models.Prod>

<table>
  @foreach(var prod in Model)
  {
    <tr>
      <td>@prod.ProductID</td>
      <td>@prod.ProductName</td>
    </tr>
  }
</table>
于 2013-03-07T14:08:30.130 回答