我正在寻找有关如何创建可在多个 MVC 3 视图上使用的可重用“控件”的最佳实践。我可以创建一个 Html 帮助程序扩展方法(以编程方式或使用 razor 中的声明性帮助程序),或者我可以创建一个部分视图。
就我而言,诀窍是我需要做的不仅仅是将一些 HTML 转储到视图调用帮助器/部分的位置。除了在该位置放置一些 HTML 标记之外,我还需要添加一些 javascript 代码以使其正常工作。通常,我会将此代码放在页面的其他位置(例如底部)。这当然不是严格要求的。另请注意,javascript 不是特定于控件实例的。换句话说,可以编写 JavaScript 来查找页面上控件 HTMl 标记的所有实例,并使用适当的事件等“激活”它。
我想到了几种可能性。
- 让助手/部分转储 HTML 和
<script>
标签就在它被调用的地方。这似乎是一个坏主意,因为这意味着该控件每页只能使用一次。
- 有两个帮手。第一个输出 HTML 标记,第二个输出 javascript。第二个只会被调用一次,并且会从页面底部调用,以便脚本最终出现在正确的位置。如果我发明了第二个这样的控件,我将有 4 个助手(2 个用于 HTML,2 个用于 Javascript)。
- 发明某种可以向控件注册 javascript 的 ScriptManager。脚本管理器将有某种帮助程序,该帮助程序将添加到页面底部,并为所有注册了某些脚本片段的控件转储 JavaScript。对 scriptmanager 帮助程序的调用可以位于 _layout.cshtml 中,以便它自动发生在任何需要它的页面上。当页面不需要它时,它不会执行任何操作。我猜这看起来不太像 MVC。
- 只需使用一个助手来输出 HTML,然后将 javascript 添加到每个页面上包含的 site.js 中即可。如果 JavaScript 在页面上找不到任何相关标记(标记将具有具有特定类的包装元素),那么它会足够聪明,不会执行任何操作。不过,在所有页面上搜索标记都会产生开销,包括没有任何这些控件的页面。
- 与 #4 相同,但将 javascript 放入其自己的 .js 文件中,并仅将其包含在使用该控件的页面上。这对于不使用该控件的页面来说更有效,但对于使用该控件的页面来说,它是一个附加的 .js 文件和关联的 HTTP 请求。
我倾向于#4,但这是一个已解决的问题吗?有更好的第六种选择吗?
我的公司正在使用 MVCContrib 可移植区域将代码打包到 DLL 中,以供可重用的“组件”
这些组件中的每一个都可以通过扩展方法来调用。例如:
Html.Components().ShowPoll();
在每个组件中,都有一种方法可以注册多个作为嵌入资源的 css/js 文件。我们的主站点将提取资源文件并在提供之前缩小+组合它们。
该组件还将注册在 JQuery 的 Document.OnReady 事件期间调用的任何页面事件。这使得每个组件都成为迷你站点、具有自己的路由、模型和视图的独立功能。
在整个站点中,为所有组件提供相同的 zip up JS。一是因为文件将被缓存,二是消除了确定页面上有哪些组件及其所需资源的复杂性。
如果您想了解有关此设置的更多信息,请告诉我。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)