2012-06-05 102 views
1

我試圖根據參數獲取產品列表。從產品說明列表(Index.chtml)中,當我點擊產品說明時,我想轉到僅列出具有該產品說明的產品的頁面。System.InvalidOperationException:序列不包含任何元素[MVC]

例如:如果我在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); 
    } 
} 
} 

VIEWS ::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::

@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> 

    } 

可有人請諮詢我該怎麼辦?謝謝!

+0

問題EF無法檢索具有'productD'值的實體作爲'productDesName'。如果數據庫中不存在記錄,則使用「SingleOrDefault」而不是「Single」。 – Eranga

+0

我嘗試過獲得所有產品(不管他們的產品說明) - 它工作 - 它列出了數據庫中的所有產品。但是,當我試圖只得到某些產品描述的產品,例如「Barstool」時,它給了我那個錯誤.....我已經嘗試使用「SingleOrDefault」,正如你所建議的那樣,它給了我這個錯誤,而不是::: System.NullReferenceException:對象引用沒有設置爲對象的一個​​實例。 :::還有什麼我可以嘗試/修復? – jannn

回答

4

在控制器中,改變

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) { 
    } 
} 
+0

謝謝Mikael。根據您的建議,我沒有收到任何錯誤,但是頁面(Browse.chtml)顯示沒有結果 - 就好像數據庫中沒有產品一樣。但是我知道他們是因爲我能夠在...之前得到所有產品的清單。是否有另一種方法可以根據參數獲得產品? – jannn

+0

您的查詢不會返回任何內容,這是肯定的。數據庫中沒有產品或者您的查詢錯誤。 – Mikael

相關問題