我目前正在开发多个ASP.NET MVC网络应用程序。
所有这些网络应用都有相同的导航栏/菜单。 一些菜单项是特定于应用程序的,因此可以从相应的应用程序传递它们。
某些菜单项不是特定于应用的,例如用户是否为管理员,我会在导航栏上显示管理员链接。获取admin属性的逻辑在业务层中可用。
是否可以制作此html助手,以便我不必从相应的应用程序传递非应用专用参数? 我可以从html帮助器中调用业务层吗?
这是可取的吗? 我希望这个html帮助器或任何其他解决方案可以轻松分发...
由于
答案 0 :(得分:1)
HTML帮助程序是返回System.Web.Mvc.HtmlHelper
对象的System.Web.Mvc.MvcHtmlString
类型的扩展方法。如果您想要“易于分发”,那么您可以创建一个包含所需助手扩展的库项目。然后将项目添加为MVC项目的参考。
@using
语句可以引入Razor视图的扩展。通过库中的扩展方法引入的helper
对象将允许您在调用帮助程序时访问Razor视图可用的大部分信息(具有ViewContext
属性)。
可以根据需要对扩展程序进行超载,以解决项目中的变化问题。公共菜单选项可以作为静态集合添加到库中,MVC项目和扩展方法都可以访问它。
<强>更新强>
MVC的设置使您可以按照自己的意愿行事。你有很多控制权。您的助手可以包含您需要的尽可能多的代码。这并不像你“违反规则”。但是,最佳实践要求您将业务逻辑保留在控制器中。通过将其放入由Razor视图调用的帮助器中,您实际上将业务逻辑移动到Razor视图中。
HTML Helpers通常是一种创建HTML代码的轻量级方法。因此,在单个Razor视图中,您可以轻松地重复使用任何数十个或数百个。当您将一堆业务逻辑移动到帮助程序中时,这个想法就会被打破。如果要重复使用帮助器,那么你有可能放慢速度。
MVC的经验法则,如果助手开始变得复杂,则创建局部视图。我可能会创建一个模型来表示菜单,然后在使用该模型的Shared文件夹中创建一个局部视图,然后从父视图中调用它。我认为这会给你更多的灵活性,并且更符合MVC的最佳实践。