MVC5.0知識點梳理

來源:互聯網
上載者:User

標籤:html   載入   自訂   display   方法   比較   art   out   public   

        我們在使用MVC的時候或許總是在使用著自己一直熟悉的知識點去實現已有的功能,多梳理一些知識點讓每種功能的實現方式可以多樣化.

我們在開發小型系統時總是使用微軟MVC的腳手架功能,比如路由可能就是使用了預設的路由,在稍微複雜或者大型的系統中其實我們可以自訂路由的.

        路由約束

      routes.MapRoute(

      name:"Language",

      url:"{language}/{controller}/{action}/{id}",

      defauts:new {controller="Home",action="Index",id=UrlParameter.Optional},

      contrains:new {[email protected]"(en)|(de)"}

      上邊的約束通過使用(en)|(de),定義了language參數只能是en或de.舉例:http://<server>/en/Home/About或者http://<server>/de/home/About都是合法的.

      動作方法

      (1)動作方法可以聲明為帶有參數

      Public string Greeting(string name)

      {

             return HttpUtility.HtmlEncode("Hello,"+name);

      }

      有了此聲明,可以使用http://<server>/Home/Greeting?name=Danile的方式(URL字串)來調用此方法。

      (2)可以聲明路由配置

       預設的路由中有Id的參數,所以以上的方法可以聲明為如下:   

      Public string Greeting(string id)

      {

             return HttpUtility.HtmlEncode("Hello,"+id);

      }

       調用方式如下:http://<ServerName>/Home/Greeting/1

      (3)動作方法可以聲明為多個參數

     public int Add(int x,int y)

   {

         return x+y;

   }

      可以使用如下url來調用此動作,以填充x和y參數的值:http://<server>/Home/Add?x=4&y=5

      當然還可以定義一個路由,以在不同的連結中傳遞值,如下:

       

       routes.MapRoute(

 

      name:"MultipleParameters",

 

      url:"{controller}/{action}/{x}/{y}",

 

      defauts:new {controller="Home",action="Index"},可以使用http://<server>/Home/Add/7/2來調用;

       視圖

      向視圖傳遞資料-控制器和視圖運行在同一個進程中。視圖直接在控制器內建立,這便於從控制器向視圖傳遞資料;

       Razor文法(/使用@做為遷移字元)可以自動檢測到c#代碼的結束為止,但有些情況中,這是無法自動看出來的。此時,可以使用圓括弧來標記變數,例如:

       <div>@(name),Stephanie</div>,有時候不識別可以嘗試另一種方式:@:來顯示定義文本開始的位置

       布局

        所有的視圖頁面都預設使用布局頁,如果當前頁面不使用布局頁,需要將Layout屬性設定為null來明確指定:

        @{

                Layout=null;

            }

         _ViewStart.cshtml頁麵包含全部視圖的預設配置.預設定義的唯一設定是將Layout屬性設為共用布局頁_Layout.cshtml.

        使用分區

        使用@section可以指定區塊代碼,然後布局頁可以引用被載入視圖中的不同模組.

        從用戶端提交資料      

@{  @:ViewBag.Title = "Create Menu";}<h2>Create Menu</h2><form action="/SubmitData/CreateMenu" method="post">  <fieldset>    <legend>Menu</legend>    <div>Id:</div>    <input name="id" />    <div>Text:</div>    <input name="text" />    <div>Price:</div>    <input name="price" />    <div>Category:</div>    <input name="category" />    <div></div>    <button type="submit">Submit</button>  </fieldset></form>

 

  預設情況下,http要求方法是GET,應用HttpPost特性後,要求方法是POST。為讀取httpPost資料,可以使用Request對象中的資訊.

      但是定義帶參數的CreateMenu方法要簡單多了。參數的名稱與表單欄位的名稱匹配

     [HttpPost]

     public ActionResult CreateMenu(int id,string text,double price,string category)//跟form中的表單欄位同名(name同名)

     {

        ......

     }

     模型繫結器

     除了在動作方法中使用多個參數,還可以使用類型,類型的屬性與輸入的欄位名稱匹配:

  [HttpPost]
  public ActionResult CreateMenu(Menu m)
  {
  ViewBag.Info = string.Format(
  "menu created: {0}, Price: {1}, category: {2}", m.Text, m.Price,
  m.Category);
  return View("Index");
  }

       模型繫結器負責傳輸HTTP POST請求中的資料。模型繫結器實現IModelBinder介面。預設情況下。使用DefaultModelBinder類將輸入欄位綁定到模型

       注釋和驗證

  public class Menu
  {
  public int Id { get; set; }
  [Required, StringLength(25)]
  public string Text { get; set; }
  [DisplayName("Price"), DisplayFormat(DataFormatString="{0:C}")]
  public double Price { get; set; }
  [DataType(DataType.Date)]
  public DateTime Date { get; set; }
  [StringLength(10)]
  public string Category { get; set; }
  }

        用於驗證的特性包括:用於比較不同屬性的CompareAttribute,用於驗證信用卡號的CreditCardAttribute,用來驗證電子郵件地址的EmailAddressAttribute,用來比較輸入與枚舉值的

        EnumDataTypeAttribute,以及用來驗證電話號碼的PhoneAttribute,為了使用驗證特性,可以在動作方法內使用ModelState.IsValid來驗證的狀態.

 

        當我們定義了某個模型不能修改時,我們可以定義另一個擁有同樣屬性的模型,並且把這個模型使用特性添加到需要約束的類上.

        例如:定義MenuMetadata類:

          public class MenuMetadata

  {

    public int Id { get; set; }
    [Required, StringLength(25), CreditCard]
    public string Text { get; set; }
    [DisplayName("Price"), DisplayFormat(DataFormatString="{0:C}")]
    public double Price { get; set; }
    [DataType(DataType.Date)]
    public DateTime Date { get; set; }
    [StringLength(10)]
    public string Category { get; set; }

  }

        [MetadataType(typeof(MenuMetadata))]

        public partial class Menu

       {

       public int Id { get; set; }
  public string Text { get; set; }
  public double Price { get; set; }
  public DateTime Date { get; set; }
  public string Category { get; set; }

       }

    再大的系統都是由零碎的知識點組成的,好的基礎就是好的地基.

 

MVC5.0知識點梳理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.