2010-05-14 154 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