0

我已经能够创建一个循环页面列表的显示。这将显示 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 上的 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 一起过滤列表,或者目前是否设计为始终返回完整集?

4

1 回答 1

1

您不能在 razor 中使用 C# 代码来修改您的视图模型。要绑定某些东西,它需要在viewmodel中表示。如果要过滤完整列表,computed视图模型上的属性应该可以解决问题。

[Computed]
public List<Page> FilteredList
{
  get { return PageList.Where(pl => pl.Title.Contains("Page01")); }
}
于 2013-08-01T16:39:29.633 回答