javascript – 如何封装ASP.NET MVC 3 Razor视图的可重用“控件”

我正在寻找有关如何创建可重用“控件”以便在多个MVC 3视图上使用的最佳实践.我可以创建一个Html帮助扩展方法(以编程方式或在razor中使用声明性帮助器)或者我可以创建一个局部视图.

在我的例子中,诀窍是我需要做的不仅仅是在视图调用helper / partial的地方转储一些HTML.除了在该位置放置一些HTML标记之外,我还需要添加一些javascript代码以使其工作.通常,我会将此代码放在页面的其他位置(例如底部).这当然是严格要求的.另外,请注意,javascript不是特定于控件实例的.换句话说,可以编写javascript,在页面上查找控件HTMl标记的所有实例,并使用适当的事件等“激活”它.

我想到了几种可能性.

>让帮助/部分转储HTML和< script>在它被调用的地方标记.这似乎是个坏主意,因为这意味着每页只能使用一次控件.
>有两个帮手.一个用于输出HTML标记,另一个用于输出javascript.第二个只会被调用一次,并将从页面底部调用,以便脚本最终到达正确的位置.如果我发明了第二个这样的控件,我会有4个帮助器(2个用于HTML,2个用于Javascript).
>创建某种控件可以注册javascript的ScriptManager. scriptmanager会有一些帮助,它会被添加到页面底部,并会为已经注册了一些脚本片段的所有控件转储javascript.对scriptmanager助手的调用可能在_layout.cshtml中,因此它会自动发生在需要它的任何页面上.当页面不需要它时,它什么都不做.我想这似乎不是MVC-ish.
>只需要一个帮助程序,它会吐出HTML,然后将javascript添加到每个页面上包含的site.js中.如果javascript在页面上找不到任何相关的标记,那么javascript就足够聪明,不会做任何事情(标记会有一个包含特定类的包装元素).但是,在所有页面上搜索标记会有开销,包括没有任何这些控件的页面.
>与#4相同,但将javascript放在自己的.js文件中,并仅将其包含在使用该控件的页面上.这对于不使用该控件的页面更有效,但它是一个额外的.js文件和相关的HTTP请求.

我倾向于#4,但这是一个解决的问题吗?还有更好的第六种选择吗?

解决方法:

我的公司正在使用MVCContrib可移植区域将代码打包成DLL,用于可重用的“组件”

可以通过扩展方法调用这些组件中的每一个.例如:

Html.Components().ShowPoll();

在每个组件中,有一种方法可以注册多个嵌入资源的css / js文件.我们的主站点将提取资源文件并在服务之前将minify组合起来.

该组件还将注册将在JQuery的Document.OnReady事件期间调用的任何页面事件.这允许每个组件都是迷你站点,具有自己的路由,模型和视图的独立功能.

在整个网站上,所有组件都提供相同的拉链JS.一个是因为文件将被缓存,两个 – 消除了确定页面上的组件及其所需资源的复杂性.

如果您想了解有关此设置的更多信息,请与我们联系.

上一篇:c# – MVC 3:根据以前的选择异步加载表单字段的最常用方法是什么?


下一篇:c# – 如何在ASP.NET MVC 5中抽象这个重复模式?