簡體   English   中英

在MVC中,控件的概念是否有意義?

[英]Does the concept of a Control make sense in MVC?

我最近開始使用MVC,我想到的一件事是MVC中是否可能存在控件的概念?

從我的角度來看,該框架允許將應用程序很好地分解為模型,視圖和控制器,但是我想不出一種很好的方式來獲取該應用程序的“垂直切片”並在另一個應用程序中重用。

我的意思是讓我吃驚的是,用MVC構建的任何UI組件都可能不太適合重用,就像您可以在ASP.NET WebForms中重用Contol一樣。 好的,有HTML Helpers,但是我在考慮一些模塊化的東西。 更像是WPF中的控制模型。

這種二分法是否成為MVC與WebForms的核心,或者可重用的UI組件可以在MVC世界中工作?

我一直在尋找相同的東西-具有自己的數據路徑的可重用小部件,並在Steve Sanderson的Blog中找到了這一點:

http://blog.codeville.net/2008/10/14/partial-requests-in-aspnet-mvc/

從文章:

“您聽說過部分視圖,那么部分請求又如何呢?在任何MVC請求中,您可以設置內部部分請求的集合,每個內部請求都可以設置自己的內部部分請求,依此類推。每個部分請求都會呈現在您的任何普通常規控制器中都是一種普通的舊操作方法,每個控制器都可以產生一個獨立的小部件。”

本文恭敬地提供了MVC Contrib Group的Sub Controller策略( http://www.mvccontrib.org/ )的替代方法,該策略也是您要尋找的解決方案。

您仍然可以在ASP.NET Web窗體中使用ascx文件和其他功能。 MVC中唯一缺少的部分是回發模型和面向視圖狀態的狀態管理。 不再有<form runat="server"> ,也沒有自動生成的隱藏字段。 除此之外,所有其他功能都可以在ASP.NET MVC中使用。 您仍然可以編寫控件,以使用基於REST的機制發布數據並在視圖中使用它們。

因此,是的,只要您的控件不依賴服務器端表單進行回發,就可以像在ASP.NET Web表單中一樣使用它們。

我猜想在MVC中很難完全封裝渲染並在僅放在頁面上的單個控件中回發處理。 在某種程度上,這是因為ASP.NET Webforms是從HTTP語義中非常抽象的,並且該抽象是一個可以創建可重用用戶控件的框架。

ASP.NET MVC沒有Web表單的抽象,因此您可以控制到三個不同控制器的帖子。 遷移到ASP.NET MVC時似乎感覺失去了易於使用的控件,但我認為您擁有一個更好的框架來分離和重用域邏輯。

在ASP.NET MVC中,您可以使用部分視圖。 Rob Conery對此發表了不錯的文章: ASP.NET MVC:有用地使用UserControls

我認為您最接近的老式控件是局部視圖,這些視圖實際上只是共享的標記,您可以將其放置在任何頁面上。 但是,他們沒有開箱即用的控制器,因此使用共享UI組件(部分視圖)的代碼必須存在於使用它的每個頁面的控制器中。 有一些方法可以減少代碼的重復,但是無需實現部分視圖控制器和綁定,我認為沒有辦法完全解決它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM