我必須在我的MVC應用程序中構建一些ascx部分視圖來封裝可重用的功能以及歸檔SOR和SOC。但是,我遇到了如何封裝驅動MVC ascx視圖的業務邏輯的挑戰。MVC:如何在MVC ascx局部視圖中封裝邏輯與webforms ascx控件具有相同的效率?
在webforms中,ASCX控件背後的代碼可以處理按鈕單擊事件,瀏覽器仍然只顯示一個回發的同一頁面。我如何在MVC中歸檔相同的東西?當〜/ Address/Edit/2包含一個帶有一個按鈕的ascx局部視圖時,它會調用另一個MVC動作 - 讓我們假設〜/ ShareController/CommonAction - CommonAction返回到相同視圖的最佳方式是什麼? ascx文件?
也許我錯過了MVC web開發中的常見模式?
謝謝
最大
更新:這是關於我要尋找的模式更多的描述:
應該是一個地址編輯器的局部視圖。它可以驗證地址,顯示 驗證錯誤並將信息保存回數據庫。
地址編輯器將坐在許多具有不同控制器/操作的頁面上。
在經典的webform中,一個ascx控件可以通過多次回發完全與用戶進行交互,而無需更改導致整個頁面處理過程的url dor。 MVC中類似場景的正確模式是什麼?
更新2:
不知道這有什麼用網頁表單的狀態(statefullness)。完全不同的功能。這是關於控制器調用另一個子控制器(或子控制器)來處理局部視圖。在本評論最後看到我的例子。
我只是想達到相同的封裝和關注的分離等級。如果MVC框架沒有,那是一個嚴重的弱點。
在MVC中,我們怎麼能有一個「事物」(或缺乏更好的替代方案的部分視圖)能夠處理演示文稿以及邏輯並駐留在另一個父頁面中而沒有任何干擾?
我的理解是,MVC中的部分視圖只是演示文稿,不能在不干擾主控制器的情況下擁有專用控制器。我希望我錯了
爲了給你另一個例子,考慮這個網頁,你正在閱讀「stackoverflow.com/questions/{id}」。它包含一個「添加評論」組件。添加評論可能會做服務器端驗證,以防止無效評論。你怎麼能創建一個端到端的「添加評論」組件,它可以駐留在任何頁面上並處理必要的控制器邏輯?我能想到的唯一方法是修改主機頁面的控制器,以便能夠提供用戶驗證消息並要求他們通過回發來糾正錯誤。這意味着您將組件添加到10個不同的頁面,您必須修改10個不同的控制器。殺死「幹」
我希望我錯了!因爲我喜歡MVC軟件。
結論:
標誌着我肯尼的答案回覆;但是,我認爲這是MVC框架從封裝,可重用性和DRY主體角度看的一個嚴重弱點。
我的意見與webforms的statefullness無關。
請允許我解釋一下:
在網絡表單,您可以100%在ascx控件和課程相關的DLL CLASSLIB的封裝複雜的功能。一(1)名開發人員可以花幾個星期來開發它。一旦他的工作完成,沒有人需要知道任何事情,只是使用它。用戶控件可以在許多頁面中重複使用,而不會打擾其他「開發人員用戶」使用ascx組件中的詳細活動。
相比之下,您絕對不能在ASP.NET MVC中實現與ascx部分需要與用戶交互的相同內容。一旦ascx需要交互,它需要它自己的控制器,控制器需要保存ModelState。
Jeremy Skinner在MVCContrib中引入了[ModelStateToTempData]: http://www.jeremyskinner.co.uk/2008/10/18/storing-modelstate-in-tempdata-with-aspnet-mvc/ 但是,這只是一個補丁。
一個好的框架應該允許開發人員100%封裝他們的工作 - 控制,部分,ascx或其他 - 並將其交給團隊的其他成員,這樣他們就可以在不知道任何數據的情況下「使用它」。 Winform在許多複雜場景中完美實現了這一點。
儘管歡迎。
您在特定場景中使用的局部視圖是什麼?按鈕點擊的目的是什麼? – 2010-08-11 05:39:29
嗨Jeff, 剛剛添加了更多評論。謝謝。 – DevTeach2010 2010-08-11 13:23:34