我应该创建HtmlHelper扩展方法来减少渲染部分视图的重复吗?

时间:2011-07-27 07:21:56

标签: asp.net-mvc html-helper

假设我有一个将在不同页面上显示的统计视图。 没有任何助手,我必须使用以下代码:

@section Statistic{
    @Html.RenderAction("Index", "Statistic", new { id = Model.UserId });
}

但是通过创建帮助器,我可以编写类似的内容:

@section Statistic{
    @Html.Stats().For(Model.UserId);
}

然后,控制器,ActionName或统计控制器参数的任何未来更改都需要在我的StatsHtmlHelper中的1个位置进行更改

我的一些同事抱怨说这个助手除了调用RenderAction之外什么都不做,然后就不应该存在了。你有什么看法?

1 个答案:

答案 0 :(得分:3)

通过创建辅助方法,可以降低调用RenderAction,ActionLink和此类方法的复杂性,并消除“魔术字符串”。但是对于每个不同的动作,你必须用你的方法(!)创建另一个帮助器,这可能会产生其他复杂性,特别是当已经存在社区工具以使生活更简单的情况下。如果您为统计数据执行此操作,为什么不对应用程序中的每个其他操作执行此操作?我会使用T4MVC及其RenderAction, ActionLink重载来接受ActionResult。有了它,当控制器,动作或参数签名发生变化时,您可以摆脱魔术字符串并获得编译时异常。对于编译器标记错误的确切位置,修复它们更容易。使用T4MVC,您的统计渲染行将是:

@{Html.RenderAction(MVC.Index.Statistic(Model.UserId));}

T4MVC方​​法适用于一般方法。您可以简单地将它们用于整个项目中的每个操作