以下是我的情况:我的应用程序中有许多专门的对象类型,我遵循标准约定,在/Shared/DisplayTemplates
文件夹中使用自定义模板显示它们,并使用模板编辑它们/Shared/EditorTemplates
。但我也希望能够为每种类型显示自定义过滤器模板,因此我想添加/Shared/FilterTemplates
文件夹,并实现我自己的@Html.FilterFor
方法,以便显示过滤器模板与显示或编辑模板完全一样。
这是否是处理这种情况的最佳方式,还是在MVC中有更正确/更优雅的方法?提前谢谢。
答案 0 :(得分:1)
当数据发送回服务器时,我总是使用EditorTemplates。我假设用户可以将过滤器提交给服务器以执行实际过滤。
创建过滤器时,我更喜欢为过滤器创建一个模型,如:
public class UserListFilterModel
{
public string Username { get; set; }
public bool IsEnabled { get; set; }
}
UserListFilterModel的视图进入EditorTemplates / UserListFilterModel.ascx。
然后将其添加为我的页面视图模型的属性。
public class MyPageViewModel
{
public UserListFilterModel Filter { get; set; }
}
然后我将过滤器模型添加到页面的模型中,并显示如下:
<%= Html.EditorFor(x => x.Filter)%>
您可能在表单中包装过滤器以允许用户提交值,因此我认为它属于EditorTemplates。用户实际上正在编辑过滤器模型。
(如果你真的想把它们分开,你可以使用UIHintAttribute,但我不会)
编辑:我添加了一些示例代码。
答案 1 :(得分:0)
我认为您误解了模板的工作原理。模板在您描述的上下文中没有意义。
模板适用于 SINGLE 数据项(尽管该数据项可以包含多个数据项,而这些数据项又有自己的模板)。
过滤器的概念是控制多个数据项,因此它们不能很好地映射到模板。
您可以做的是为您的集合类创建一个添加过滤的DisplayTemplate,因此无需创建自定义类型的模板。只需使用DisplayTemplates。