2010-05-14 91 views
1

我开发了一个插件系统,可以很容易地将新逻辑插入到应用程序中。现在我需要提供轻松添加UI小部件的功能。ASP.NET MVC强类型构件

对于如何使用ASP.NET MVC创建门户系统(如iGoogle)已经有了一些很好的回应,并且我对整体概念很满意。

我的问题是关于如何制作强类型的小部件。

本质上,当我们设置一个小部件时,我们定义了用于呈现该小部件的控制器和动作名称。对于没有强类型的小部件,我们可以使用一个控制器动作(因为我们只是在没有模型的情况下返回PartialView(widgetControlName))

对于强类型化的小部件(例如对于IList),我们需要添加一个新控制器的行动(因为我相信它是不可能使用ActionResult例如ActionResult泛型)。

重要的是,小部件开发人员不应该更改主应用程序控制器。所以,我的两个想法是这样的:(?这是甚至可能的)

  1. 在一个单独的类库中创建新的控制器
  2. 主Web项目创建一个局部WidgetController,然后在其他项目中扩展这个 - 不可能按照@ mfeingold

就widget(用户控件)的开发而言,我们可以使用我们的扩展项目中的post build事件将它们复制到Views/Widgets目录中。

这是一个很好的方法。我很感兴趣的是其他人如何处理这种情况。

感谢 本

P.S - 万一有帮助,我们如何可以使部件的例子 - 无需使用Javascript

<%foreach (var widget in Model) {%> 

    <%if (widget.IsStronglyTyped) { 
      Html.RenderAction(widget.Action, widget.Controller); 
     } else { 
      Html.RenderPartial(widget.ControlName); 
     } 
    %> 

<%} %> 

回答

1

对我来说,似乎MvcContrib的portable areas适合完美地开发独立的小部件。

下面是一个示例 - OpenId authentication widget

下周你甚至可以看到c4mvc presentation

+0

@Arbis,可移植区域看起来好像会很好地完成这项工作,但很高兴看到我们如何使用IoC容器,以便我们可以失去主要Web项目对可移植区域项目的依赖关系。例如,作为便携式区域开发的博客功能可能需要通过总线执行验证。从我在http://cdn-static.viddler.com/flash/publisher.swf?key=81f1a688上看到的示例中,消息处理程序需要在主Web应用程序中注册。这意味着要“插入”博客功能,我需要深入Visual Studio。 – 2010-05-17 10:13:03

+0

关于在便携式区域使用IoC - 请参阅http://groups.google.com/group/mvccontrib-discuss/browse_thread/thread/db00b09665dcc7ac# – 2010-05-18 11:30:51

+0

上的解决方案您的便携式区域链接不正确。 – StriplingWarrior 2010-10-06 17:17:12

1

回答你的第二个问题是NO。所有部分类的源代码应该在同一个项目中。

0

模板引擎是否可以为您的窗口小部件类型创建模板,然后只需调用<%: Html.EditorForModel(untypedWidgetModel) %> - 理论上,您的该类型模板将接管并呈现适当的HTML。

或者我误解了模板如何工作?

+0

不幸的是,这不起作用,因为小部件可能有完全不同的视图模型。我知道迎合这一点的唯一方法是针对每种类型的控件都有不同的控制器操作。 – 2010-05-14 15:23:57