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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...