【发布时间】:2011-01-01 19:36:07
【问题描述】:
我需要一些建议。
(对于那些在我重新编辑这个问题之前已经阅读过这篇文章的人)
我已经开发了一些 asp.net mvc 网页。
每个页面都有一个母版和一些 ascx 控件(2 - 6 之间)嵌入其中一个 js 和 css 文件。
到目前为止一切都很好。
为了提高模块化、灵活性和可测试性,现在希望 ascx 能够作为独立控件工作。
(每个 ascx 也有自己的 css 和 js 文件,在某些情况下,它内部还有另一个控件它)
为了满足这个要求,我们使用查询字符串调用控制器。
(不同于从页面调用它的方式 - 通过 Ajax)
呈现的 ascx(部分)在浏览器中呈现,没有原始页面的所有其他部分。
在这种情况下,为了使部分正确显示 (css) 和正确操作 (js/jquery),需要将所有相关文件(例如:jquery)添加到用户控件。
这与将文件放置在最合乎逻辑的位置(例如母版页)的概念相矛盾。
我该如何克服这个问题?
请记住,这与在应用程序中创建的每个“控制”ascx 文件相关。
示例:
我添加了描述我的场景的 3 个案例的描述:
(这是从我问过的另一个问题中复制的 here)。
案例 1: 在页面案例中,可能是页面有一些部分是在页面构建时使用 ajax 加载的。根据用户的操作,可能会使用 ajax 再次调用部分。在这种情况下,我将它们视为页面上的控件。
案例 2: 在独立案例中,可以直接从浏览器调用部分作为测试的一部分。在这种情况下,您只能在浏览器中看到部分内容。
案例 3: 在第三种情况下,可以将部分调用作为 google chrome 扩展程序中 iframe 的一部分(例如)。在这种情况下,您可以在您的 Web 应用程序中可能未构建的页面中看到部分内容。
任何想法都将不胜感激。
对于那些庆祝 - 新年快乐!
【问题讨论】:
-
朱利安,我会'提交'css与控件的正常运行无关。为什么??因为 css 直接与相关目标站点的整体外观相关联。因此,在我看来,css(除非与 jquery 选择器相关)应该在更高级别进行抽象,因此应该与相关的 ascx 控件完全隔离。我可能错了,但这对我来说感觉更“正确”——即由站点驱动的 css,而不是控制功能(除非 css 是 jquery 驱动的类或 id 选择器)。
-
用完了字符来完成 :)。使用上述规则意味着可以共享面向管理员和面向公众的控件,即使两者的样式彼此不一致。
-
@jim - 我们的一些控件中包含隐藏元素(使用 css) 如果 css 在站点级别,则单独呈现控件时将在控件上看到隐藏字段。此外,如果没有 css,用户将无法验证此控件的外观。