我們在使用mvc的時候或許總是在使用著自己一直熟悉的知識點去實現已有的功能,多梳理一些知識點讓每種功能的實現方式可以多樣化.
我們在開發小型系統時總是使用微軟mvc的腳手架功能,比如路由可能就是使用了預設的路由,在稍微複雜或者大型的系統中其實我們可以自定義路由的.
路由約束
routes.maproute(
name:"language",
url:"///",
defauts:new ,
contrains:new
上邊的約束通過使用(en)|(de),定義了language引數只能是en或de.舉例:http:///en/home/about或者http:///de/home/about都是合法的.
動作方法
(1)動作方法可以宣告為帶有引數
public string greeting(string name)
有了此宣告,可以使用http:///home/greeting?name=danile的方式(url字串)來呼叫此方法。
(2)可以宣告路由配置
預設的路由中有id的引數,所以以上的方法可以宣告為如下:
呼叫方式如下:http:///home/greeting/1
(3)動作方法可以宣告為多個引數
public int add(int x,int y)
可以使用如下url來呼叫此動作,以填充x和y引數的值:http:///home/add?x=4&y=5
routes.maproute(
name:"multipleparameters",
url:"///",
defauts:new ,可以使用http:///home/add/7/2來呼叫;
檢視
向檢視傳遞資料-控制器和檢視執行在同乙個程序中。檢視直接在控制器內建立,這便於從控制器向檢視傳遞資料;
razor語法(/使用@做為遷移字元)可以自動檢測到c#**的結束為止,但有些情況中,這是無法自動看出來的。此時,可以使用圓括號來標記變數,例如:
@(name),stephanie
,有時候不識別可以嘗試另一種方式:@:來顯示定義文字開始的位置
布局
所有的檢視頁面都預設使用布局頁,如果當前頁面不使用布局頁,需要將layout屬性設定為null來明確指定:
layout=null;
_viewstart.cshtml頁面包含全部檢視的預設配置.預設定義的唯一設定是將layout屬性設為共享布局頁_layout.cshtml.
使用分割槽
使用@section可以指定區塊**,然後布局頁可以引用被載入檢視中的不同模組.
從客戶端提交資料
@
預設情況下,http請求方法是get,應用httppost特性後,請求方法是post。為讀取httppost資料,可以使用request物件中的資訊.
但是定義帶引數的createmenu方法要簡單多了。引數的名稱與表單字段的名稱匹配
public actionresult createmenu(int id,string text,double price,string category)//跟form中的表單字段同名(name同名)
模型繫結器
除了在動作方法中使用多個引數,還可以使用型別,型別的屬性與輸入的欄位名稱匹配:
public actionresult createmenu(menu m)
, price: , category: ", m.text, m.price,
m.category);
return view("index");
}模型繫結器負責傳輸http post請求中的資料。模型繫結器實現imodelbinder介面。預設情況下。使用defaultmodelbinder類將輸入字段繫結到模型
注釋和驗證
public class menu
[required, stringlength(25)]
public string text
[displayname("price"), displayformat(dataformatstring="")]
public double price
[datatype(datatype.date)]
public datetime date
[stringlength(10)]
public string category
}用於驗證的特性包括:用於比較不同屬性的compareattribute,用於驗證信用卡號的creditcardattribute,用來驗證電子郵件位址的emailaddressattribute,用來比較輸入與列舉值的
enumdatatypeattribute,以及用來驗證**號碼的phoneattribute,為了使用驗證特性,可以在動作方法內使用modelstate.isvalid來驗證的狀態.
當我們定義了某個模型不能修改時,我們可以定義另乙個擁有同樣屬性的模型,並且把這個模型使用特性新增到需要約束的類上.
例如:定義menumetadata類:
public class menumetadata
public int id
[required, stringlength(25), creditcard]
public string text
[displayname("price"), displayformat(dataformatstring="")]
public double price
[datatype(datatype.date)]
public datetime date
[stringlength(10)]
public string category
[metadatatype(typeof(menumetadata))]
public partial class menu
public int id
public string text
public double price
public datetime date
public string category
再大的系統都是由零碎的知識點組成的,好的基礎就是好的地基.
Linux知識點梳理
使用者名稱 主機名 root hostname 使用者名稱 主機名稱 符號含義 當前使用者屬於root使用者 當前使用者屬於普通使用者 注意 對系統進行配置管理時,如要root使用者 檢視主機名稱 hostname設定主機名稱 hostname hadoop senior.com注意 該方式設定,當...
spring 知識點梳理
1.spring預設所有管理的bean都是單例模式 懶載入,所有的bean都是交給spring容器中的map管理,生命週期與spring相同,如果使用多例模式,bean則是交給記憶體管理,生命週期與spring無關 2.ssm分層 控制層 服務層 資料層 對應的註解分別為 controller se...
Linux C知識點梳理
第1章 程式設計和c語言 最簡單的c語言程式 第2章 演算法 程式的靈魂 第3章 簡單的c程式設計 順序程式設計 常量,變數 先定義後使用 常變數,識別符號 資料型別 運算子與表示式,不同型別資料間混合運算 c語句 資料的輸入輸出,printf scanf 函式,字元資料輸入輸出 第4章 選擇結構程...