3

コントローラーの Index アクションで次のコードを使用して、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 クエリのパラメーターの名前を からProdに変更しましたp。指定した方法で Prod を使用すると、コンパイラは ProductID と ProductName が静的プロパティであると認識しました。この後にパラメーターの名前を変更fromすると、問題の解決に役立ちます。

于 2013-03-07T14:20:08.693 に答える
3

要素がありませんreturnViewIndex 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 に答える
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 に答える