2010-04-06 73 views
0

據我所知,在ASP.NET MVC中,httprequest被映射到控制器/動作。Asp網絡MVC控制器和小部件

  • 由於一個請求用於獲取一個網頁,我們可以調用這些控制器「page controllers」嗎?

我的另一個問題是關於小部件(用戶控件)和RenderPartial方法:

  • 如果一個widget代表的經典ASP.NET webcontrolusercontrol,我想呈現這個小部件很多頁面,如果此邏輯位於「page controller」中,我怎麼能避免重複該小部件的邏輯?

回答

1

由於一個請求用於獲取一個網頁,我們可以調用這些控制器的「頁面控制器」嗎?

你爲什麼要這樣做?他們被命名爲控制器。畢竟,控制器上的一個動作並不需要爲「網頁」提供服務,它可能會使用JSON數據,XML,RSS或網頁的一部分進行響應(如果需要,可以使用「控件」)。

如果一個widget代表了經典asp.net三夏或用戶控件,我想使這個小部件在很多頁面,如何避免重複部件的邏輯,如果這個邏輯是在「頁面控制器「?

  1. 確保你的(業務)邏輯是不是在控制器:它不屬於那裏。控制器的工作是映射輸入/輸出,而不是處理邏輯。
  2. 包含您的小部件的視圖應具有ViewModel,其中包含小部件中所需的ViewModels,例如

-

MainViewModel 
{ 
    UserWidgetViewModel UserViewModel; 
    List<Foo> Bar; 
    // ... 
} 

UserWidgetViewModel 
{ 
    string UserName; 
    int Reputation; 
    //... 
} 

我第一次感覺到這個unelegant,但我一直在使用了一段時間,我認爲這很好地概括了必要的數據。

希望可以幫到

+1

我用相同的方式封裝視圖模型。 例如,我有一個包含多個圖表的頁面。圖形視圖是採用BarChartViewModel的partialview。在我的mainViewModel中,我有一個List ,我傳遞給視圖以使用適當的參數進行渲染... – 2010-04-06 11:33:12

0

hmm 我認爲你需要修改你對控制器的理解。 控制器有幾種方法。它不是映射到頁面的控制器,而是ActionMethods。

當調用RenderPartial時,它將輸入相應的ActionMethod(並且該方法可以在任何控制器上),該方法將在調用View(.aspx或其他位置)處調用它的地方返回PartialView(.ascx)。 ascx如果你有多個級別的局部視圖)。 沒有邏輯在那裏重複...或者,我不明白你的問題?

0

你可以試試widget controller。它在.NET MVC 2中使用了新的Html.RenderAction方法。是的,它在技術上打破了純粹的mvc模式(完美的MS),但出於實際的目的,您可能會發現它非常有用。