ページのリストをループするディスプレイを作成できました。これにより、次のように DB テーブル内のすべてのページが表示されます。
@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 のラムダ式で表示されるものをフィルタリングできるようにしたいと考えています。現在、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 を使用するより良い方法はありますか、またはこれは現在、常に完全なセットを返すように設計されていますか?