0
我已經能夠創建循環頁面列表的顯示。這將顯示數據庫表中的所有頁面,如下所示。KnockoutMVC Foreach Lambda過濾器(或任何過濾器)
@using (var page = ko.Foreach(m => m.PageList))
{
@page.Html.TextBox(p => p.PageErrorMessage)
@page.Html.TextBox(p => p.PageSuccessMessage)
@page.Html.TextBox(p => p.Title)
@page.Html.TextBox(p => p.Content)
}
我希望能夠過濾由Foreach上的lambda表達式顯示的內容。目前,返回IEnumerable類型,即使在最後使用ToList()時,以下情況也不起作用。
//Note: I have tried .Where pl.Title == "string" with the same results
@using (var page = ko.Foreach(m => m.PageList.Where(pl => pl.Title.Contains("Page01")))
{
@page.Html.TextBox(p => p.PageErrorMessage)
@page.Html.TextBox(p => p.PageSuccessMessage)
@page.Html.TextBox(p => p.Title)
@page.Html.TextBox(p => p.Content)
}
我可以得到我想要的結果,但這樣做看起來很麻煩。如果我使用相同的支票爲每個字段添加可見的支票,我只會看到我想要的字段。
//Note: p.Title.Contains("string") does not work for me in the Visible here
@using (var page = ko.Foreach(m => m.PageList))
{
@page.Html.TextBox(p => p.PageErrorMessage).Visible(p => p.Title == "Page01!")
@page.Html.TextBox(p => p.PageSuccessMessage).Visible(p => p.Title == "Page01!")
@page.Html.TextBox(p => p.Title).Visible(p => p.Title == "Page01!")
@page.Html.TextBox(p => p.Content).Visible(p => p.Title == "Page01!")
}
是否有更好的方式來使用foreach篩選列表或目前設計爲總是返回全套?
對knockout-mvc不太熟悉,但我確信你必須在viewmodel上引用一個計算列表。您不能在頁面上使用C#lamba,因爲它需要轉換爲javascript。 – Tyrsius
你對轉換爲js的轉換是正確的,但這並不意味着它不應該有某種過濾器。任何類型的過濾器都可以接受,它不需要是lambda。在我看來,如果你有一個數據庫中的項目,你並不總是想顯示它們全部。也許有些東西是不活動的,或者甚至是使用聯繫人編輯器,你可能只想一次拉出5個。 – JabberwockyDecompiler
這仍然需要是視圖模型中的邏輯,表示爲一個計算列表。 – Tyrsius