Asp.net mvc4可重用声明组件/控件arhitecture

时间:2012-08-27 12:12:27

标签: asp.net-mvc components

我想创建可重用的mvc4 UI组件/控件,可以在整个应用程序中重用。在互联网上有很多关于此的信息(主要是mvc3),但它似乎不完整或太具体。

一般应用程序arhitecture将从正常或ajax请求返回呈现的html(我想澄清该问题不是指SinglePageApp模型,因此组件在服务器上并且可能具有客户端模型和通信没有使用json webapi)

问题是“如何最好地创建一个组件,使其行为如下所述?

可重用组件应具有以下特征:

  • 它应该在同一个应用程序的不同位置/视图上重用(它是特定于应用程序的,不打算打包在单独的库中以备将来使用)。
  • 它应该有声明性标记,因此很容易为开发人员阅读(没有扩展方法,TagBuilder等);
  • 它应该收到一个选项列表,指定它应该如何表现(showCloseBtn:true,SaveUrl:{...}),一些处理事件的事件处理程序以及必要时的数据模型(用于绑定到html控件)
  • 可以观察到;它可以生成事件并通知任何注册到这些事件的人(我的意思是在客户端);类似的行为是在telerik控件上,但在我们的例子中,存在声明性aproach的限制(我们不想构建类库)。

示例:

@(Html.Telerik().Upload()
    .Name("attachments")
    .ClientEvents(events => events
        .OnLoad(
        @<text>
            function(e) {
                // Perform required actions here.
            }
        </text>)
    )
)
  • 某些组件每页仅使用一次,其他组件可能会多次出现,具体取决于选项params
  • 每个组件都需要呈现html和javascript
  • 能够从客户端
  • 请求组件会很高兴

示例(这只是为了澄清问题,这不是我需要解决的具体案例):

假设我们有一个管理某些部门角色的应用程序。我们有一个Person实体,它有Name,Age,DepartmentId(假设它只能属于一个部门)。 我们为Edit / Insert创建一个PersonComponent表单,其中包含Name,Age和部门ddl的标签/文本框。它还有一个Save btn。 单击save btn时,根据组件的初始化方式,它从字段中获取所有数据,然后进行ajax调用,将json数据发送到url(url作为param接收),并将Save事件发送给任何人。注册。 save事件处理程序有一个包含json数据的参数。如果没有将url作为参数发送到组件,它只会通知所有侦听器。

每个部门都有不同的视图,可以重用组件。一个页面可以同时显示多个部门。

需要考虑的事项:

  • 要创建这个组件,我们可以使用声明性HtmlHelpers,PartialViews或RenderAction帮助器(或其他方法?)
  • 如果组件每页只使用一次但页面有多个组件,那么每个组件实际获取自己的业务数据可能更好,以避免父容器需要获取数据每个组件
  • 如果同一组件在同一页面上多次出现,则最好不要复制javascript代码; (有一个相关的讨论here
  • 在PartialViews的情况下,ViewModel必须封装组件选项,modeldata和事件处理程序。
  • 将HtmlHelper呈现为对客户端请求的响应有点奇怪
  • 拥有事件机制以使组件可重用是非常重要的;仅仅将一些html渲染为组件/控件
  • 是不够的
  • 架构/解决方案可能包括一些客户端api,如require.js(用于加载组件js),knockout.js或其他;重要的是不要使用依赖项过度复杂化,但如果它们是有用的则使用它们

注意:

有类似的问题herehere,但问题的背景不同。

0 个答案:

没有答案