在ASP.NET MVC控件中放置可重用代码的最佳位置?

时间:2011-07-14 16:16:01

标签: .net asp.net asp.net-mvc

我有一个ASP.NET MVC控件,它必须做一些工作来格式化模型中的一些信息。这导致构建所需HTML的相当复杂的逻辑。我希望能够在控件中多次重复使用此代码。有没有办法在控件中创建一个方法(或类似的东西)来做到这一点?我知道我可以创建UI辅助方法,但是这些方法不会对每个控件都可见吗?

为ASP.NET MVC控件创建辅助方法的最佳实践是什么?谢谢!

其他信息:
我们正在使用ASP.NET MVC 3,但我认为我们不太使用Razor,所以它可能不是一个选项。

2 个答案:

答案 0 :(得分:4)

封装复杂UI可重用代码的最佳位置是HtmlHelper扩展:

public static class MyHtmlHelperExtensions
{
    public static MvcHtmlString MyReusableCode<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, 
            Expression<Func<TModel, TProperty>> expression, object stuff)
        {
            // do the work and return formatting, etc
        }
}

用法(在部分视图或完整视图中):

Html.MyReusableCode(model => m.Stuff, myOtherStuff);

更新

好的,似乎这个问题已经死了。无论如何,只是为了澄清更多,如果你看一下MVC本身,所有常见的UI逻辑都已实现为HtmlHelper扩展,例如DropDownForDisplayForTextboxFor

答案 1 :(得分:1)

试着记住,封装和松耦合。 如果您需要只有控件需要的辅助方法,则创建(可能是静态)方法,该方法对该控件是私有/受保护的。如果需要从控件本身外部调用此方法,则可以公开单独的方法,也许您想要进行一些额外的检查,然后调用内部方法。像.Render()

这样的东西