ASP.NET MVC5----瞭解我們使用的@HTML幫助類

来源:http://www.cnblogs.com/netxiaohui/archive/2016/09/23/5899705.html
-Advertisement-
Play Games

20幾歲,怕什麼。 自己的感覺 說一個自己最近使用AngularJS的感受,我們之前使用mvc進行項目開發都是瞭解和經常使用HTML的幫助類,來完成我們前端大部分代碼的編寫,其實在我沒有接觸AngularJS之前對於這種方法還是很喜歡的,畢竟它是將.aspx頁面革命掉的東西,但是隨著項目中使用... ...


                                         20幾歲,怕什麼。

自己的感覺   

       說一個自己最近使用AngularJS的感受,我們之前使用mvc進行項目開發都是瞭解和經常使用HTML的幫助類,來完成我們前端大部分代碼的編寫,其實在我沒有接觸AngularJS之前對於這種方法還是很喜歡的,畢竟它是將.aspx頁面革命掉的東西,但是隨著項目中使用AngularJS我越來越喜歡這種將前後端分開的開發模式,我相信這就是以後的發展形勢。但是眼下這個MVC還是要快快的用好。

:瞭解HTML幫助類的內在美

HTML輔助方法利用路由引擎找到HomeController控制器的Search操作,他在後臺使用GetVirtualPath方法,該方法在RouteTable的Routes屬性中,在global.asax中,Web應用程式註冊所有的路由位置。

        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }

通過RouteConfig.RegisterRoutes(RouteTable.Routes);來實現我們輔助方法的實現。下麵我們看下要是不需要這個,如何實現我們的輔助方法。

一般的寫法:


@using (Html.BeginForm("Search","Admin",FormMethod.Post))
{
    <input type="text" name="text"/>
    <input type="submit" name="sub" value="Search"/>
}

不使用HTML幫助類的寫法:

@{
    var context = this.ViewContext.RequestContext;   //請求上下文
    var values = new RouteValueDictionary               //不區分大小寫的鍵值對集合
    {
        {"controller","home"},
        {"action","index"}
    };
    var path = RouteTable.Routes.GetVirtualPath(context, values);      //返回與路由相關的URL
}
<form action="@path.VirtualPath",method="POST">
    <input type="text" name="text" />
    <input type="submit" name="sub" value="Search" />
</form>

現在我們看要是不使用幫助類就必須寫這麼多的代碼,可以發現VS將我們需要寫的代碼全都封裝起來,使用起來很方便。

輔助方法工作原理

每一個Razor視圖都繼承了它們的基類HTML屬性,HTML屬性的類型是System.Web.Mvc.HtmlHelper<T>;T是一個泛型類型的參數,代表傳遞給視圖的模型類型(預設是dynamic),這個屬性提供了一些可以在視圖中調用的實例方法,還有很多擴展方法(.出來,方法名稱左邊有一個向下的箭頭)。

:常用的輔助方法

---:每一個輔助方法都有一個htmlattributs屬性,可以設置頁面的html屬性。

---:輔助方法大多數都是檢查ViewDate對象以獲取要顯示的當前值(ViewBag對象中所有值也可以獲取到)

---:輔助方法不僅可以查看ViewData內部的數據,也可以得到模型元數據 。

  • Html.BeginForm

提交表單時使用,這個一般和@using(){}一起,這樣就可以釋放掉資源。輔助方法在調用結束期間生成一個起始標簽,並返回一個實現了介面IDisposable的對象。這樣就可以在using(){]方法裡面被釋放掉。

  • Html.ValidationSummary()
        @Html.ValidationSummary(excludePropertyErrors:true)   //顯示模型級別的錯誤。

此方法用來顯示ModelState字典中所有驗證錯誤的無序列表,使用參數(bool)來告知輔助方法錯誤的級別。(顯示與模型本身相關的錯誤,不顯示模型屬性相關的錯誤。)

        public ActionResult Search()
        {
            ModelState.AddModelError("","模型級別的錯誤");   //設置為true
            ModelState.AddModelError("Title", "模型屬性級別的錯誤");   //設置為false
            return View();
        }
  • Html.TextBox和Html.TextArea

都是顯示文本,第一個是文本框Text,第二個是TextArea;TextArea可以設置顯示指定的行數和列數。

image

  • Html.Label

返回一個label元素,並使用String類型的參數來決定渲染的文本和for特性值。這個一般使用顯示輸入框的標題。將模型屬性中的Display(“姓名”)顯示出來。

        [Display(Name = "姓名")]
        public string Name { get; set; }
  • Html.DropDownList和Html.ListBox

這兩個都是返回一個<select/>元素。DropDownList第一個是單向選擇,ListBox為多項選擇。

關於下拉列表,它需要一個包含所有可選項的SelectListItem對象集合,其中每一個SelectListItem對象集合中有包含有Text,Value和Selected三個屬性。可以根據需要構建自己的SelectListItem對象集合。

看一下之前項目中使用的下拉,之前不是很理解原理,現在看書說是為了避免反射開銷的同時自己生成的SelectListItem集合,使用的是Linq的Select方法來將SelectListItem對象集放入項目中。

 

  • Html.ValidationMessage

當ModelState字典中的某一特定欄位出現錯誤時,可以使用ValidationMessage輔助方法來顯示相應的錯誤消息。這個一般情況就是在服務端驗證的時候顯示錯誤消息。

  • Html.Hidden

將一些必要的屬性(ID)通過隱藏的方式傳遞--提交表單。

  • Html.PassWord

這個是密碼框輸入的值為隱藏的。之前一直沒有使用這個,看來以後要多多使用。

  • Html.RadioButton

單選按鈕一般組合使用,為用戶的單項選擇提供一組可選項。

    @Html.RadioButton("color","red",true)
    @Html.RadioButton("color","blue")
    @Html.RadioButton("color", "green")
  • Html.CheckBox

是唯一一個渲染兩個輸入元素的輔助方法。是一個隱藏域hidden。

    @Html.CheckBox("checkbox")

image

模版輔助方法

利用元數據和模版構建HTML,其中元數據包括關於模型值(名稱和類型)的信息和(通過數據註解或自定義提供器添加)模型元數據。

  • Html.Display

可以操作模型上面綁定的一些值。

  • Html.Editor

也是設置文本框的,好的一點是可以通過模型上面綁定的值來顯示HTML。

輔助方法與ModelState

用戶顯示表單值得所有輔助方法也需要與ModelState字典交互。其實ModelState是模型綁定的副產品,並且存儲模型綁定期間檢測到的所有驗證錯誤,以及用戶提交用來更新模型的原始值(驗證失敗,再次回到視圖中顯示之前輸入的值)。

渲染輔助方法

  • Html.ActionLink

渲染成一個超鏈接。這個效果是一個預設路由。

  • Url.Action

這個是渲染一部分路徑。

    @Html.ActionLink("Link Text","Index")    
    <br />
    <a href="@Url.Action("Index")">123</a>

imageimage

  • Html.RouteLink

這個說實在的和前面那個是一樣的。只是這個只可以接收路由名稱,而不能接收控制器名稱和操作方法

      @Html.RouteLink("Link Text",new{Action="Index"})

URl輔助方法

  • Url.Action

這個和之前介紹的一樣。這個只是顯示部分路徑。

  • Url.Content

可以把用戶程式的相對路徑轉換為絕對路徑。現在項目中還沒使用過。

       @Url.Content("~/Scripts/_references.js")   //~:可以看作為應用程式的根目錄
  • Url.RouteUrl

和之前一樣,只接收路由名。

Html.Partial和Html.RenderPartial

Partial方法用於將部分視圖渲染為字元串。也就是局部試圖。

RenderPartial返回的不是字元串,而是直接寫入響應輸出流。使用的時候必須將此放入代碼塊中。

@{
    Html.RenderPartial("List");
}

Html.Action和Html.RenderAction

和上面的一樣,Partial輔助方法通常在單獨的文件中應用視圖標記來幫助視圖渲染視圖模型的一部分,Action執行單獨的控制器操作,並顯示結果。其實action是需要走方法裡面的。需要執行一些邏輯的時候可以使用。

RenderAction也是可以直接寫入響應流之中。用的地方不是很多。

        @Html.Action("Search",new{student=new Student{Age = 12,Name = "Andyahui"}})


        [ChildActionOnly]
        public ActionResult Search(Student student)
        {
            ModelState.AddModelError("","模型級別的錯誤");   //設置為true
            ModelState.AddModelError("Title", "模型屬性級別的錯誤");   //設置為false
            return View();
        }


image

前面的都是一些常用的視圖幫助類,我們可以使用他們來完成前臺部分代碼的編寫。

       自己不努力,別人是沒辦法的。


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

-Advertisement-
Play Games
更多相關文章
  • 按位取反運算符是按照二進位的每一位取反,比如byte類型,~0的結果就是255。 該功能可以在mask中做一些反轉操作 如下代碼,a存放了2,4,8三個值。用按位取反'~'運算符反轉 列印結果是 false,flase,false,true,true。Mask已經被反轉 比如在unity引擎中,該操 ...
  • 寫過不少次關於八皇後問題的代碼了,不過都是基於標準的控制台層面上的輸入輸出。這次決定採用WPF來實現一個帶有界面的八皇後的小程式 在開始寫代碼之前,首先回顧一下八皇後問題: 八皇後問題,是一個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於1848年提出:在8×8格的國 ...
  • c#自定義日誌記錄 很簡單:將類複製到項目中,最後在配置文件上配置一下:logUrl即可。 預設保存在:項目/temp/log ...
  • 當你在開發程式的時候, 調試(debugging)和日誌(logging)都是非常重要的工作。在應用中使用日誌主要有三個目的 l 監視代碼中的變數的變化情況,把數據周期性地記錄到文件中供其它應用進行統計分析工作 l 跟蹤代碼運行的軌跡,作為日後審計的依據 l 擔當集成開發環境中的調試器,... ...
  • 1、Connection對象主要提供與資料庫的連接功能 配置web.config文件 <appSettings> <add key="ConnectionString" value="Server=10.136.*.*;database=MTL;uid=sa;pwd=sa;"/> </appSett ...
  • // StringBuffer sb = new StringBuffer();// for(Object bid :list){// sb.append(bid+",");// }// return sb.deleteCharAt(sb.length()-1).toString(); ...
  • Introduction to ASP.NET Core Asp.net core 介紹 270 of 282 people found this helpful By Daniel Roth, Rick Anderson and Shaun Luttin Meng.Net 自譯 ASP.NET C ...
  • 中國式商業智能報表ActiveReports免費公開課,10月20日開講。適合人群:報表開發人員,報表產品經理,商業報表使用構建人員。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...