在 ASP.NET MVC 中實現使用者控制項的最佳方式是什麼?
與該站點上的許多其他人一樣,我正在考慮為未來的項目遷移到 ASP.NET MVC。目前我的網站執行的是傳統的 ASP.NET 2.0 Web 窗體,它對我們來說工作正常,所以我的另一個選擇就是堅持我所知道的並使用集成的 AJAX 東西遷移到 ASP.NET 3.5。
我想知道使用者控制項如何在 ASP.NET MVC 中工作。我們有大量的
.ASCX控制項和一些複合控制項。當我與網頁設計師一起工作時,很容易讓他們有效地使用 ASCX 控制項,即使沒有任何程式知識,所以這是一個明確的優勢。但是當然缺點是頁面生命週期,這可能是令人抓狂的,以及 ASCX 控制項難以在不同項目之間共享的事實。複合控制項是可共享的,但對設計師來說基本上是一個黑盒子。ASP.NET MVC 中的模型是什麼?有沒有辦法創建控制項來解決我們使用 ASCX 和復合控制項處理過的問題?允許網頁設計師輕鬆訪問而不必擔心程式碼被破壞是一個重要的考慮因素。
要實現使用者控制項,請執行以下呼叫:
<% Html.RenderPartial("~/Views/Shared/MyControl.ascx", {data model object}) %>您可能還會看到從 PR5 開始不再有效的舊語法
<%= Html.RenderUserControl("~/Views/Shared/MyControl.ascx", {data model object}) %>從 Web 窗體遷移到 MVC 時,您總是需要擔心程式碼中斷,但是 ASP.NET MVC 團隊在最大限度地減少問題方面做得很好。
正如尼克建議的那樣,您確實能夠呈現您的使用者控制項,但顯然傳統 ASP Webforms 的頁面週期、頁面狀態和回發將不再起作用,從而使您的控制項很可能無用。
我認為您必須重寫大多數複雜的控制項才能將您的網站移植到 MVC,而簡單的控制項(例如,僅提供格式且沒有回發狀態)應該可以正常工作。Nick 提供的程式碼在這種情況下可以正常工作。
關於更多項目之間的共享:我認為控制項將更像是可以在整個網站上共享的“可重用 HTML 渲染組件”,而不是具有邏輯的“可重用程式碼組件”(如 WebForms 控制項)。您的網路邏輯將/應該在頁面控制器中,而不是在 HTML 控制項中。因此,在更多項目之間共享控制項不會像在 WebForms 案例中那樣有用。