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

来源:http://www.cnblogs.com/webdep/archive/2017/10/10/7643895.html
-Advertisement-
Play Games

首先解釋下:本文只是對Asp.net MVC4高級編程這本書學習記錄的學習筆記,書本內容感覺挺簡單的,但學習容易忘記,因此在邊看的同時邊作下了筆記,可能其它朋友看的話沒有情境和邏輯順序還請諒解! 一、MVC控制器渲染視圖的三種方式。 如下以HomeController控制器中的代碼為例: 1、預設方 ...


 

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

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

如下以HomeController控制器中的代碼為例:

1、預設方式

public ActionResult Sample()

        {

            ViewBag.Message = "MySampleView";

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

       

2、指定視圖名稱方式

public ActionResult Sample()

        {

            ViewBag.Message = "MySampleView";

            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。

        }

 

二、控制器通過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>

 

三、視圖模型

      通過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語法。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 教研室新進機器人,組內成員需要對其做一下必要的瞭解。手冊純英文內容多,這裡挑重點介紹幾條: 感測器: 作為輸入設備,Tiago對周圍環境感知完全通過各種感測器實現。配備的感測器有以下幾種: 1,激光測距儀:0.05-10m 15Hz 2,聲吶:0.03-1m 40kHz 3,慣性測量感測器:MPU ...
  • 本文目錄:1.1 錯誤日誌ErrorLog1.2 訪問日誌CustomLog1.3 日誌輪替:rotatelogs工具1.4 日誌輪替:cronolog工具1.5 rotatelogs和cronolog的比較 需要記錄的日誌類型有:錯誤日誌ErrorLog、訪問日誌CustomLog。錯誤日誌一般採 ...
  • 我們將ASP.NET程式從IIS6移植到IIS7,可能運行提示以下錯誤: HTTP 錯誤 500.23 - Internal Server Error 檢測到在集成的托管管道模式下不適用的 ASP.NET 設置。 為什麼會出現以上錯誤? 在IIS7的應用程式池有兩種模式,一種是“集成模式”,一種是“ ...
  • 主要包括Alias指令、AliasMatch、Redirect、RedirectMatch、ScriptAlias和ScriptAliasMatch。它們由mod_alias模塊提供,該模塊用於提供簡單的路徑映射和重定向需求,更複雜的內容見URL重寫。 其中ScriptAlias用法和Alias完全 ...
  • 本文目錄:1.1 htpasswd命令1.2 身份認證類基本指令1.3 Require指令1.4 web身份認證示例 httpd對web身份認證的支持很豐富,提供的控制也非常細緻。無疑,功能豐富意味著模塊多。關於完整的模塊,見http://httpd.apache.org/docs/2.4/mod/ ...
  • [1]顯示 [2]文件 [3]關機 [4]登錄 [5]shell [6]VIM ...
  • Tomcat 概述: Tomcat是Apache 軟體基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。由於有了Sun 的參與和支持,最新的Servlet 和JSP 規範總是能在Tomcat ...
  • 在講vim編輯器之前,我們要先明白為什麼要學vim編輯器。系統管理員的重要工作就是要修改與設定某些重要軟體的配置文件,因此至少要學會一種以上的文字介面的文書編輯器。 現在開始正式學習vim編輯器。基本上vim共分為三種模式,分別是一般模式,編輯模式,與指令列模式,這三種模式的作用分別是: 1)一般模 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...