ASP.NET MVC强类型小部件

时间:2010-05-14 15:05:42

标签: asp.net-mvc

我开发了一个插件系统,可以轻松地将新逻辑插入应用程序。现在我需要提供轻松添加UI小部件的功能。

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

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

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

对于强类型的小部件(例如对于IList),我们需要添加一个新的控制器动作(因为我认为不可能将Generics与ActionResult一起使用,例如ActionResult)。

重要的是,小部件开发人员不应该更改主应用程序控制器。所以我的两个想法是:

  1. 在单独的类库中创建新控制器
  2. 在主Web项目中创建一个部分WidgetController,然后在其他项目中扩展它(这是否可能?) - 根据@mfeingold不可能
  3. 就小部件(用户控件)的开发而言,我们可以使用扩展项目中的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);
          } 
        %>
    
    <%} %>
    

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

以下是一个示例 - OpenId authentication widget

下周您甚至可以观看c4mvc presentation

答案 2 :(得分:0)

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

或者我误解了模板是如何起作用的?