我有一个ASP.NET MVC控件,它必须做一些工作来格式化模型中的一些信息。这导致构建所需HTML的相当复杂的逻辑。我希望能够在控件中多次重复使用此代码。有没有办法在控件中创建一个方法(或类似的东西)来做到这一点?我知道我可以创建UI辅助方法,但是这些方法不会对每个控件都可见吗?
为ASP.NET MVC控件创建辅助方法的最佳实践是什么?谢谢!
其他信息:
我们正在使用ASP.NET MVC 3,但我认为我们不太使用Razor,所以它可能不是一个选项。
答案 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);
DropDownFor
,DisplayFor
,TextboxFor
等
答案 1 :(得分:1)
试着记住,封装和松耦合。
如果您需要只有控件需要的辅助方法,则创建(可能是静态)方法,该方法对该控件是私有/受保护的。如果需要从控件本身外部调用此方法,则可以公开单独的方法,也许您想要进行一些额外的检查,然后调用内部方法。像.Render()