Asp.net MVC4高級編程學習筆記-視圖學習第一課編寫Razor視圖20171009

 

首先解釋下:本文只是對Asp.net MVC4高級編程這本書學習記錄的學習筆記,書本內容感受挺簡單的,但學習容易忘記,所以在邊看的同時邊做下了筆記,可能其它朋友看的話沒有情境和邏輯順序還請諒解!html

1、MVC控制器渲染視圖的三種方式。

以下以HomeController控制器中的代碼爲例:web

1、默認方式

public ActionResult Sample()編程

        {學習

            ViewBag.Message = "MySampleView";spa

            return View();  //注意這裏是渲染Views目錄下的Home子目錄(經過HomeController中的Home來找到子目錄Home)下視圖名稱爲action名稱值爲Sample(public ActionResult Sample()爲HomeControll聲明的action名稱爲Sample)的視圖,文件名爲Sample.cshtml.net

       

2、指定視圖名稱方式

public ActionResult Sample()htm

        {對象

            ViewBag.Message = "MySampleView";ci

            return View(「MySampleView」);//注意這裏是渲染Views目錄下的Home子目錄下視圖名稱爲MySampleView的視圖,文件名爲MySampleView.cshtml。開發

        }

3、指定不一樣目錄下視圖方式

public ActionResult Sample()

        {

            ViewBag.Message = "MySampleView";

            return View(「~/Views/Example/Index.cshtml」);//這裏是常數Views目錄下的Example子目錄下的視圖Index的視圖,文件名爲Index.cshtml。

        }

 

2、控制器經過ViewData和ViewBag向視圖傳遞信息。

ViewData是一種字典數據類型。

Example:

         ViewData[「CurrentTime」]=DateTime.Now;

 

ViewBag是一種動態數據類型(dynamic)。上面的ViewData賦值等價於下面的賦值

Example:

         ViewBag.CurrentTime=DateTime.Now;

 

注意差別:若是ViewData中的key有空格是不能用ViewBag訪問的,好比

ViewData[「full  name」]是不能轉換成ViewBag式的;另外就是ViewBag中的值是不能做爲參數傳遞的,由於不肯定數據類型,除非使用ViewData方式傳參或者強制數據類型轉換,好比

@Html.TextBox(「name」,ViewBag.name);這種寫法編譯是通不過的,須要改爲以下兩種形式,

@Html.TextBox(「name」,ViewData[「name」]);

@Html.TextBox(「name」,(string)ViewBag.name);

 

ViewData是一種ViewDataDictionary類型,並不是僅僅是Dictionary類型,它有一個Model屬性,能夠用來在視圖中獲取指定的模型對象。例如用它來在視圖中傳遞指定模型:

public ActionResult  List()

        {

            var albums=new List<Album>();

                      for(int i=0;i<10;i++)

                      {

                             albums.Add(new Album{Title=」Album」+i})

}

            return View(albums);

        }

在後臺須要先把View方法中的參數值賦給ViewData.Model屬性。而後告知視圖哪一種類型的模型正在使用@model聲明。注意這裏須要輸入模型類型的徹底限定類型名(命名空間和類型名稱),以下所示:

 

//參數值賦給ViewData.Model屬性

@model IEnumberable<MVCApplication1.Models.Album> 

<ul>

         @foreach(Album p in Model)

{

         <li>@p.Title</li>

}

</ul>

 

若是不想輸出完整類型名可使用using。

@using MVCApplication1.Models

//參數值賦給ViewData.Model屬性

@model IEnumberable< Album>

<ul>

         @foreach(Album p in Model)

{

         <li>@p.Title</li>

}

</ul>

 

對於視圖常常使用的命名空間,能夠在View目錄下的web.config中配置<add namespace="LYG.HelloWorld" />

Example:

  <system.web.webPages.razor>

    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

    <pages pageBaseType="System.Web.Mvc.WebViewPage">

      <namespaces>

        <add namespace="System.Web.Mvc" />

        <add namespace="System.Web.Mvc.Ajax" />

        <add namespace="System.Web.Mvc.Html" />

        <add namespace="System.Web.Optimization"/>

        <add namespace="System.Web.Routing" />

 

        <add namespace="LYG.HelloWorld" />

      </namespaces>

    </pages>

  </system.web.webPages.razor>

 

3、視圖模型

      經過MVC的模型Model在傳入視圖時,每每有一個主視圖多個從視圖或其它無關信息好比登錄信息、用戶權限信息等。咱們能夠考慮主視圖聲明到@model中,其它信息放到ViewData中。但這樣作並不是適合全部人開發需求,如要要嚴格控制視圖流入的數據,就必須全部數據都是強類型,以便視圖編寫人員能智能感知。這裏所以引入視圖模型的概念,就是把全部數據再組合成一個模型成爲視圖模型傳入到@model中,好比以下購物車視圖模型包括主視圖產品信息,其它信息總價格和顯示給用戶的消息的代碼示例。

Public class shoppingCatViewModel

{

         Public IEnumberable<Product> products{get;set} //主視圖

         Public decimal totalPrice{get;set;} //總價格

         Public string message{get;set;} //顯示給用戶的消息

}

 

而後經過@model shoppingCatViewModel 向這個模型中強制性地輸入一個視圖。

 

今天的學習到此爲此,下一課將詳細介紹Razor語法。

相關文章
相關標籤/搜索