【问题标题】:ASP.NET MVC Strongly Typed WidgetsASP.NET MVC 强类型小部件
【发布时间】:2010-05-14 15:05:42
【问题描述】:

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

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

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

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

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

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

  1. 在单独的类库中创建新控制器
  2. 在主 web 项目中创建一个部分 WidgetController,然后在其他项目中扩展它(这甚至可能吗?) - 根据@mfeingold 不可能

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

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

谢谢 本

P.S - 如果有帮助,可以举个例子说明我们如何在不使用 Javascript 的情况下渲染小部件

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

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

<%} %>

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

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

    这是一个例子 - OpenId authentication widget

    下周你甚至可以关注c4mvc presentation

    【讨论】:

    • @Arbis,可移植区域看起来确实可以很好地完成这项工作,尽管很高兴看到我们如何使用 IoC 容器,这样我们就可以失去主 Web 项目所需的依赖关系有关于便携区的项目。例如,作为便携式区域开发的博客功能可能需要通过总线执行身份验证。从我在cdn-static.viddler.com/flash/publisher.swf?key=81f1a688 看到的示例中,消息处理程序需要在主 Web 应用程序中注册。这意味着要“插入”博客功能,我需要深入了解 Visual Studio。
    • 关于在便携式区域中使用 IoC - 请参阅我的解决方案 groups.google.com/group/mvccontrib-discuss/browse_thread/thread/…
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      还是我误解了模板的工作原理?

      【讨论】:

      • 不幸的是,这不起作用,因为小部件可能具有完全不同的视图模型。我知道满足这一点的唯一方法是为每种类型的小部件设置不同的控制器操作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多