Asp.net Mvc 的積木,談Asp.net MVC中視圖邏輯模組化和controller組件的使用方法

來源:互聯網
上載者:User
我是阿瑞,第一次寫技術文章,沒啥經驗,語無倫次的地方還請大家多多體諒。
談談第一個話題: Asp.net MVC中利用UserControl任意組裝你的View。
在Asp.net MVC中,您可以使用UserControls
來簡化或模組化你的View邏輯。
當然可以像傳統webform中那樣使用。
<uc1:News ID=control1 runat=server listcount="3" />
但是這樣使用,有兩個缺點:
1.aspx頁面頂部必須加個討厭的聲明。對於view來說,當然越簡練越好。
2.還有一個缺點,就是傳遞的參數必須都是基礎資料量類型,如果要傳遞
Object,我們該怎麼辦呢?

好在貼心的asp.net mvc提供了一系列的RenderUserControl方法。
還可以傳遞任何參數,還可以構造初始屬性值,可以不用在aspx頂部進行聲

明。非常乾淨清爽。
<%=Html.RenderUserControl(“~/UserControls/NewsList.ascx”)%>
<%=Html.RenderUserControl

(“~/UserControls/NewsList.ascx”,ViewData.News)%>

第三個參數以匿名方法的形式,可以方便構造出ascx的預設屬性。
<%=Html.RenderUserControl

(“~/UserControls/NewsList.ascx”,ViewData.News, new

{NewID=2})%>
好了,現在usercontrol已經可以很好的切割組裝view層邏輯了,
但是無論如何組裝,都是被動接受controller的調用的。
這有什麼問題嗎?請思考如下情境,也是我之前請教鄒建的問題:
--------------->
有一個情境,不知道如何用mvc實現
比如一個新聞系統,首頁把各個新聞分類裡的新聞標題的最新N條讀出來,
在webform下,我把首頁新聞列表封裝成ascx,並且自訂了兩個屬性:

新聞類別和顯示條數。這種情況下,首頁aspx裡只要有顯示列表的地方,設

置一下這兩個屬性就OK了。也就是說,改首頁aspx,就可以最終只取需要

的資料。
而在mvc下,控製取資料部分和頁面徹底分離,上面的邏輯,既要讓美工去

修改頁面,也要程式員修改controler?
鄒兄給我得回答是言簡意賅 :用RenderComponent。
<-------------------------
這就引入了第二個話題:
web組件的使用,此web組件,不僅僅是像ascx那樣包含view,更重要的是

他有自己的controller行為。而這個組件可以直接被其他的view所調用,
雖然像繞口令,不過結合上面的情境就好理解了。
這個被view層直接調用的controller必須是繼承於ComponentController,
這和普通的controller是不一樣的。類似這樣:
    public class NewsComponentController : ComponentController
    {
         public void ContentList()
        {
            RenderView("NewsList", new
VstarApp.DAL.Service.ContentInfo_Service().GetAllData());
        }
    }
而這個 ComponentController所Render的視圖檔案路徑也是有規定的,是

~/Components/yourcontrollerName/Views/ViewName.aspx
對於上面的NewsComponentController來說,就是
~/Components/NewsComponent/Views/NewsList.aspx
所以視圖路徑要建對哦。

剩下的工作,就是在其他view裡調用這個組件controller
<%=Html.RenderComponent<CMSWeb.Controllers.NewsComponentController>(f => f.ContentList())%>

好了,一切ok.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.