<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • ASP.NETMVC視圖(三)-創(chuàng)新互聯(lián)

            ASP.NET MVC 視圖(三)

            專注于為中小企業(yè)提供網(wǎng)站設(shè)計制作、網(wǎng)站建設(shè)服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)景寧畬族自治免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

            前言

            上篇對于Razor視圖引擎和視圖的類型做了大概的講解,想必大家對視圖的本身也有所了解,本篇將利用IoC框架對視圖的實現(xiàn)進行依賴注入,在此過程過會讓大家更了解的視圖,最后還會簡單的介紹一下自定義的視圖輔助器是怎么定義和使用的。

            ASP.NET MVC 視圖

            自定義視圖引擎

            Razor視圖引擎執(zhí)行過程

            Razor視圖的依賴注入、自定義視圖輔助器

            分段、分部視圖的使用

            Razor語法、視圖輔助器

            Razor視圖的依賴注入

            首先我們來看一下要定義實現(xiàn)依賴注入的功能接口規(guī)范和默認(rèn)實現(xiàn),示例代碼1-1.

            代碼1-1

            using System.Web.Mvc;
            using Ninject;
             
            namespace MvcApplication.Models
            {
                public interface IStringManage
                {
                    MvcHtmlStringCombinationString(string strPar1, string strPar2);
                }
                public class DefaultStringManage: IStringManage
                {
                    public MvcHtmlString CombinationString(string strPar1, stringstrPar2)
                    {
                        returnnew MvcHtmlString(strPar1+ strPar2);
                    }
                }
            }

            在IStringManage類型中定義了CombinationString()方法,用于將兩個字符串類型的數(shù)值拼接起來,DefaultStringManage類型就是默認(rèn)實現(xiàn)了,這里就不多說了。

            下面我們再來定義在編譯時刻視圖將要實現(xiàn)繼承的類型,示例代碼1-2

            代碼1-2

            using System.Web.Mvc;
            using Ninject;
             
            namespace MvcApplication.Models
            {
                public abstract class StringManageView : WebViewPage
                {
                    [Inject]
                    public IStringManage StringManage { get; set; }
                }
            }

            這樣的定義起初是不會有什么問題的,因為cshtml視圖文件在編譯時是繼承自WebViewPage類型的,現(xiàn)在我們要讓cshtml視圖所繼承的類型是StringManageView,所以必須讓StringmanageView繼承自WebViewPage,因為WebViewPage是抽象類型,而我們又不想實現(xiàn)什么所以要定義為抽象類型,在StringManageView類型中,我定義了IStringManage類型的屬性StringMange,并且使用IoC框架中的Inject特性來描述它,使的在編譯是可以通過IoC來實現(xiàn)屬性的依賴注入。

            下面我們來看一下視圖代碼,這里的視圖代碼還是引用前面篇幅使用最多的一個示例,代碼1-3和代碼1-4

            代碼1-3

            public ActionResultIndex(List<Product>model)
            {
                ViewBag.StrPar1 = "Thisis";
                ViewBag.StrPar2 = "ViewIoCCase";
                returnView(model);           
            }

            代碼1-4

            @inherits MvcApplication.Models.StringManageView
            @{
                ViewBag.Title = "Index";
            }
            <h3>
                Index</h3>
            @foreach (varitem in Model)
            {
                <h4>ID: @item.ID Name:@item.Name</h4>
            }
            <h3>@StringManage.CombinationString(ViewBag.StrPar1,ViewBag.StrPar2)</h3>

            控制器方法部分的代碼定義是沒有問題的,在代碼1-4,也就是Index視圖的定義中通過@inherits指令來使視圖文件在編譯時繼承自某個類型,以及在下面的使用中用到了StringManage屬性,并且還調(diào)用了方法,這里看起來都沒什么問題,但是放在這里用就有問題了,因為上面使用了foreach來遍歷Model,在我們定義StringManageView的時候并沒有對Model的類型做約束什么的,而控制器方法中也是需要將List<Product>類型傳遞到視圖的,這里就引起了沖突,圖1.

            圖1

            ASP.NET MVC 視圖(三)

            遇到這種情況我們只需修改一下代碼1-2中的定義,讓Model類型是在編譯時是可確定的而不是object類型,來看代碼1-5

            代碼1-5

            public abstract class StringManageView: WebViewPage<dynamic>
            {
               [Inject]
               public IStringManage StringManage { get; set; }
            }

            對的,讓StringManageView實現(xiàn)泛型的WebViewPage就可以了,上個篇幅中視圖的基類也都是這樣定義的,不是說上面代碼1-2定義的就是錯誤的,定義的沒有錯,只是應(yīng)用的視圖不合適,因為Index視圖本身需要對Model做一些操作,又不想因為為視圖添加的依賴注入功能而修改所以才會引起的這個錯誤,如果放在普通的視圖里使用那是沒有問題的。

            上面這些都定義好了,下面我們需要實現(xiàn)自定義的IDependencyResolver類型,目的在于綁定我們需要進行依賴注入的功能模塊到IoC中,代碼1-6.

            代碼1-6

            using Ninject;
            using System.Web.Mvc;
             
            namespace MvcApplication.CustomDependencyResolver
            {
                public class NinjectDependencyResolver:IDependencyResolver
                {
                    privateIKernel Kernel;
                    publicNinjectDependencyResolver()
                    {
                        Kernel = newStandardKernel();
                        AddBinding();
                    }
             
                    privatevoid AddBinding()
                    {
                        Kernel.Bind<Models.IStringManage>().To<Models.DefaultStringManage>();
                    }
             
                    public object GetService(TypeserviceType)
                    {
                        returnthis.Kernel.TryGet(serviceType);
                    }
             
                    public IEnumerable<object>GetServices(Type serviceType)
                    {
                        returnthis.Kernel.GetAll(serviceType);
                    }
                }
            }

            對于代碼1-6就不作過多的解釋了,在控制器激活部分都講解過近乎類似的注入封裝類型。

            最后我們在Global.asax文件的Application_Start()方法中,將Model綁定器和NinjectDependencyResolver類型添加中MVC框架中,代碼1-7

            代碼1-7

            ModelBinders.Binders.Add(typeof(List<Product>),new CustomListModelBinder());
            DependencyResolver.SetResolver(newCustomDependencyResolver.NinjectDependencyResolver());

            最后看下結(jié)果,圖2.

            圖2

            ASP.NET MVC 視圖(三)

            自定義視圖輔助器

            實際上自定義視圖輔助器就是擴展方法的定義,首先我們來看定義,實現(xiàn)的功能同代碼1-1相同,代碼2-1

            using System.Web.Mvc;
             
            namespace MvcApplication.CustomHtmlHelper
            {
                public static class MyCustomHtmlHelper
                {
                    public static MvcHtmlStringCombinationString(this HtmlHelperhtmlHelper, string strPar1, string strPar2)
                    {
                        returnnew MvcHtmlString(strPar1+ strPar2);
                    }
                }
            }

            代碼2-1這樣的一個類型也就是自定義視圖輔助器了,當(dāng)然了這只是一個簡單的示例,現(xiàn)在我們需要把它在視圖中使用起來,我們得先把這個自定義的視圖輔助器所在的命名空間添加到Views文件中的Web.Config中,代碼2-2.

            代碼2-2

              <system.web.webPages.razor>
                <hostfactoryType="System.Web.Mvc.MvcWebRazorHostFactory,System.Web.Mvc, Version=3.0.0.0, Culture=neutral,PublicKeyToken=31BF3856AD364E35" />
                <pagespageBaseType="System.Web.Mvc.WebViewPage">
                  <namespaces>
                    <addnamespace="System.Web.Mvc" />
                    <addnamespace="System.Web.Mvc.Ajax" />
                    <addnamespace="System.Web.Mvc.Html" />
                    <addnamespace="System.Web.Routing" />
                    <addnamespace="MvcApplication.CustomHtmlHelper"/>
                  </namespaces>
                </pages>
              </system.web.webPages.razor>

            然后是在視圖中引用擴展方法所處的命名空間,這樣配置過后就可以在視圖用運用了我們剛剛自定義的視圖輔助器了,代碼2-3.

            代碼2-3

            @inherits MvcApplication.Models.StringManageView
            @usingMvcApplication.CustomHtmlHelper
            @{
                ViewBag.Title = "Index";
            }
            <h3>
                Index</h3>
            @foreach (varitem in Model)
            {
                <h4>ID: @item.ID Name:@item.Name</h4>
            }
            <h3>@StringManage.CombinationString(ViewBag.StrPar1,ViewBag.StrPar2)</h3>
            @Html.CombinationString("This is a ","Case")

            最后我們看一下結(jié)果如圖3.

            圖3

            ASP.NET MVC 視圖(三)

            另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

            文章題目:ASP.NETMVC視圖(三)-創(chuàng)新互聯(lián)
            當(dāng)前URL:http://www.jbt999.com/article40/dihoho.html

            成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站用戶體驗、企業(yè)網(wǎng)站制作、移動網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化

            廣告

            聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

            網(wǎng)站托管運營

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • ww成人| 一级做a爰片性色毛片成人久久久国产 | 操逼毛片 | 美女被操在线播放 | 真的可以看 波多野结衣 一区 |