2008-09-03 72 views
11

像這個網站上的許多其他人一樣,我正在考慮轉移到ASP.NET MVC的未來項目。目前,我的網站正在運行傳統的ASP.NET 2.0 Web窗體,它對我們來說工作正常,所以我的另一種選擇是堅持我所知道的,並通過集成的AJAX內容轉移到ASP.NET 3.5。在ASP.NET MVC中實現用戶控件的最佳方式是什麼?

我想了解一下用戶控件在ASP.NET MVC是如何工作的。我們有大量的.ASCX控件和一些複合控件。當我與網頁設計師合作時,即使沒有任何編程知識,也很容易讓他們有效地使用ASCX控件,所以這是一個很好的補充。但是當然,缺點是頁面的生命週期可能令人發狂,而且ASCX控件很難在不同的項目之間共享。複合控件是可共享的,但基本上是設計師的黑盒子。

是什麼在ASP.NET MVC模型?有沒有辦法創建控件來解決我們使用ASCX和複合控件處理的問題?允許網頁設計師輕鬆訪問而不必擔心代碼被破壞,這是一個重要的考慮因素。

回答

8

要實現你做下面的調用用戶控件:

<% Html.RenderPartial("~/Views/Shared/MyControl.ascx", {data model object}) %> 

您還可以看到舊的語法,作爲PR5的不再有效

<%= Html.RenderUserControl("~/Views/Shared/MyControl.ascx", {data model object}) %> 

你永遠不必擔心關於從Web窗體移植到MVC時的代碼斷開問題,但是ASP.NET MVC團隊在減少問題方面做了大量工作。

1

正如尼克建議的那樣,您確實能夠呈現您的用戶控件,但很明顯,傳統ASP Web表單的頁面循環,頁面狀態和回傳將無法工作,從而使您的控件很可能無用。

我想你會擁有大部分的複雜控件的重寫端口您的網站的MVC,而簡單的控制它,例如,只提供格式,並沒有回髮狀態,應該簡單地工作。 尼克提供的代碼只是在這種情況下工作。

關於更多項目之間的共享:我認爲控件更像是可以在網站上共享的「可重用的HTML渲染組件」,而不是具有邏輯(如WebForms控件)的「可重用代碼組件」。您的網絡邏輯將/應該在頁面控制器中,而不是在HTML控件中。因此,跨越更多項目共享控件將不會像WebForms案例那樣有用。

1

呀,你可以做的RenderPartial。這是一個好的開始。但最終這些人將需要邏輯和其他控制器類型的東西。注意框架團隊中的子控制器實現。 MvcContrib中也應該有一些東西。或者滾動你自己的。

編輯:我剛剛發佈了關於這個在這裏:http://mhinze.com/subcontrollers-in-aspnet-mvc/

+2

這有一個死鏈接。 – chrish 2011-01-20 13:11:04

1

MVC有不同的頁面生命週期比較,以你的用戶控件。

你可能認爲這是重新寫。

的ASPX是視圖。你仍然需要重寫,語法不同。 JavaScript將起作用。但是我幾乎找不到WebControls的工作。因爲MVC不再有視圖狀態和回傳。

對於後面的代碼(aspx.cs),您需要將其轉換爲控制器類。 Page_Load方法將不再有效。您可能將其保留至Index()方法。

模型只是您的代碼背後消耗的實體類。

結論,這是一個完全重寫。乾杯。快樂的編碼。

相關問題