DRYing MVC助手选项

时间:2014-05-26 10:54:21

标签: c# asp.net-mvc dry

想象一下包含网格的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操作共享

,那么(在我看来,这不是很漂亮!)

是否有任何最佳做法或合适的做法!

1 个答案:

答案 0 :(得分:0)

在控制器中,您可以定义要显示的视图(或者在您的情况下,要传递给视图的信息)。

在这种情况下......你有一个控制器Persons和一个索引动作。在索引视图中......您可以设置网格。

所以...对我而言,完全可以提供一组Person属性,仅用于视图。请记住,您应该将VIEWMODELS发送到视图,而不是域模型。所以,在这种情况下......如果你只需要名称和代码......你可以用这些属性创建一个QuickPerson类......并在你的数据库查询中执行:

  .Select(x => new QuickPerson(){ Code = x.Code, Name = x.Name})

不确定columnBuilderAction是否可以自动检测到属性以避免这种情况。

如果您没有设置columnBuilder,会发生什么?如果它使用模型的所有公共属性...那么您刚刚解决了问题,因为您的新QuickPerson模型只有所需的模型。