1

パラメータに基づいて製品のリストを取得しようとしています。製品の説明のリスト(Index.chtml)から、製品の説明をクリックすると、その製品の説明がある製品のみをリストするページに移動したいと思います。

例:Index.chtmlページの[Barstools]をクリックすると、Browse.chtmlページのbarstoolsのみを参照したいと思います。

しかし、私はこのエラーを受け取り続けます:

Exception Details: System.InvalidOperationException: Sequence contains no elements

Source Error: 

Line 25:         {
Line 26:             // 
Line 27:             var productModel = productDB.ProductDess.Include("Products")
Line 28:                 .Single(p => p.productDesName == productD);
Line 29:             return View(productModel);

これが私が持っているものです:

モデル:::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::


Product.cs


[Table("Product")]
[Bind(Exclude = "productID")]
public class Product
{
    [ScaffoldColumn(false)]
    [Key]
    public string productID { get; set; }
    public string productName { get; set; }
    public string productDim { get; set; }
    public string productWoodSp{ get; set; }
    public string productFabric { get; set; }
    public string productTop { get; set; }
    public string productFinish { get; set; }
    public string productAddInfo { get; set; }
    public string productImgURL { get; set; }
    public string productType { get; set; }

    public string collectionID { get; set; }
    public virtual Collection collection { get; set; }

    public string productDesID { get; set; }
    public virtual ProductDes ProductDes { get; set; }
}

ProductDes.cs


[Table("ProductDes")]
public class ProductDes
{
    [Key]
    public string productDesID { get; set; }
    public string productDesName { get; set; }

    public List<Product> Products { get; set; }
}

ProductEntities.cs


public class ProductEntities : DbContext
{
    public DbSet<Collection> Collections { get; set; }
    public DbSet<Project>    Projects    { get; set; }
    public DbSet<Product>    Products    { get; set; }
    public DbSet<ProductDes> ProductDess  { get; set; }
}

コントローラー::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

using System.Web.Mvc;
using StoreWeb.Models;
using System.Data.Entity;

namespace StoreWeb.Controllers
{
public class SampleController : Controller
{
    ProductEntities productDB = new ProductEntities();

    public ActionResult Index()
    {
        var productDes = productDB.ProductDess.ToList();
        return View(productDes);
    }

    //
    public ActionResult Browse(string productD)
    {
        //
        var productModel = productDB.ProductDess.Include("Products")
            .Single(p => p.productDesName == productD);
        return View(productModel);
    }
}
}

ビュー:::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::

@model StoreWeb.Models.ProductDes

@{
    ViewBag.Title = "Browse" + Model.productDesName;
}

<h2>Browse</h2>
@foreach (var product in Model.Products)
    {

        <p />
        <a href="@Url.Action("Details", new { id = product.productID })">
        <img src="@product.productImgURL"  alt="@product.productName" />
            @product.productID @product.productName
        </a> 

    }

誰かが私に何をすべきかアドバイスしてもらえますか?ありがとうございました!

4

1 に答える 1

5

コントローラーで、変更

var productModel = productDB.ProductDess.Include("Products")
    .Single(p => p.productDesName == productD);

var productModel = productDB.ProductDess.Include("Products")
    .SingleOrDefault(p => p.productDesName == productD);

ビューで、変更

@foreach (var product in Model.Products) {
}

@if (Model != null) {
    foreach (var product in Model.Products) {
    }
}
于 2012-06-05T01:12:06.873 に答える