我想按類別顯示項目。我使用LINQ和一切工作,除了我無法顯示所有項目,無論類別。可能是路由問題,因爲我已經問過關於我使用的linq表達式的問題,它應該沒問題。總之,這裏是我的代碼:asp.net mvc中的路由問題3.按類別顯示項目,但不顯示所有項目
public ViewResult Content(string category, int page = 1)
{
var model = new StoreContentViewModel
{
Items = _itemsRepository.GetItems()
.Where(i => i.Product.Category == null ||
i.Product.Category != null && i.Product.Category == category)
.OrderBy(i => i.ItemId)
.Skip((page - 1) * PageSize)
.Take(PageSize)
.Select(i => i),
}
}
而且RegisterRouts方法的內容:
// without categories
routes.MapRoute(
null,
"Store/Content/Page{page}",
new { controller = "Store", action = "Content", category = (string)null},
new { page = @"\d+" });
// with categories
routes.MapRoute(
null,
"Store/Content/{category}/Page{page}",
new { controller = "Store", action = "Content" },
new { page = @"\d+" });
// Default route
routes.MapRoute(
null,
"{controller}/{action}",
new { controller = "Home", action = "Index"});
我很困惑的「有和無類」擊潰的順序。
的事情是,當我輸入網址:
~/Store/Content
或:不顯示
~/Store/Content/Page1 // or Page2
項目。但是如果我輸入:
~/Store/Content/Man's-Shoes/Page1
顯示與「Man's-Shoes」類別相關的項目。
那麼,這個問題與路由或馬氏菌有什麼關係還有另一個問題?
p.s.過去兩天我一直在解決這個問題,所以任何幫助都是合適的。
編輯: 也有這個單元測試失敗。可能它寫得很糟糕。檢查它也。
在我的模型我有項目實體 「包含」 產品和運輸單位:
[TestMethod]
public void Can_Filter_Content()
{
//Arrange
private Mock<IItemsRepository> _itemsMock = new Mock<IItemsRepository>();
private Mock<IProductRepository> _productsMock = new Mock<IProductRepository>();
private Mock<IShippingRepository> _shippingMock = new Mock<IShippingRepository>();
_itemsMock.Setup(i => i.GetItems()).Returns(new[]
{
new Item { ItemId = 1, ProductId = 1, ShippingId = 1},
new Item { ItemId = 2, ProductId = 2, ShippingId = 2},
new Item { ItemId = 3, ProductId = 3, ShippingId = 3},
new Item { ItemId = 4, ProductId = 4, ShippingId = 4}
});
_productsMock.Setup(p => p.GetProducts()).Returns(new[]
{
new Product { ProductId = 1, Category = "shoes"},
new Product { ProductId = 2, Category = "shoes"},
new Product { ProductId = 3, Category = "superShoes"},
new Product { ProductId = 4, Category = "shoes"}
});
var controller = new StoreController(_itemsMock.Object,
_productsMock.Object, _shippingMock.Object) {PageSize = 2};
// Act
Item[] result = ((StoreContentViewModel) controller.Content(null).Model).Items.ToArray();
ViewResult viewResult = controller.Content(null);
// Assert
Assert.IsTrue(result[0].ItemId == 1 && result[1].ItemId == 2);
Assert.AreEqual(result.Length, 2);
Assert.AreEqual("", viewResult.ViewName);
}
Mabby這有助於
與您的問題無關,但是'i.Product.Category!= null &&'您的LINQ查詢的一部分是還原劑。 '||'後面的部分只會在類別不爲空時執行。 – Ameen
如果數據庫中沒有項目,該怎麼辦?它會執行沒有上面的行? –
僅當'content'變量爲空或空時,纔會添加'Where'子句? – shahkalpesh