想象一下包含网格的MVC视图:
@{
Html.Grid(
autoGenerateColumn: false,
Url : "/Grid/GetData",
columnBuilderAction: p =>
{
p.Add(c => c.Name, "100");
p.Add(c => c.Code, "100").AlignCenter();
}
);
}
URL指定返回json数组的操作包含用于填充网格的数据。 显然" / Grid / GetData"应该只返回person的Name和Code属性,但是人有更多的属性。
如果我们在GetData操作中指定了此属性
,则违反了DRY如果我们将此属性从客户端(使用网格的Ajax请求)传递给操作
,则需要更多流量如果此属性在控制器中定义,将ViewData传递给网格并与GetData操作共享
,那么(在我看来,这不是很漂亮!)是否有任何最佳做法或合适的做法!
答案 0 :(得分:0)
在控制器中,您可以定义要显示的视图(或者在您的情况下,要传递给视图的信息)。
在这种情况下......你有一个控制器Persons
和一个索引动作。在索引视图中......您可以设置网格。
所以...对我而言,完全可以提供一组Person属性,仅用于视图。请记住,您应该将VIEWMODELS发送到视图,而不是域模型。所以,在这种情况下......如果你只需要名称和代码......你可以用这些属性创建一个QuickPerson
类......并在你的数据库查询中执行:
.Select(x => new QuickPerson(){ Code = x.Code, Name = x.Name})
不确定columnBuilderAction
是否可以自动检测到属性以避免这种情况。
如果您没有设置columnBuilder,会发生什么?如果它使用模型的所有公共属性...那么您刚刚解决了问题,因为您的新QuickPerson
模型只有所需的模型。