1、MVC執行順序
MVC在底層和傳統的asp.net是一致的,在底層之上,相關流程如下:
1)Global.asax里,MvcApplication對象的Application_Start()事件中,調用 RouteConfig.RegisterRoutes(RouteTable.Routes); 來注冊路由規則。
2)RouteConfig.RegisterRoutes()方法里,給出的默認規則為{controller}/{action}/306378 .
a. 在有特別需要的時候,到這里來修改規則。
b. 未指明Controller默認為HomeContoller,未指定Action默認為Index, 也就是說,直接訪問站點時,會默認導航到HomeController下的Index Action.
c. Action後跟的內容會被映射為名為id的參數。 比如: User/Delete/1 會匹配到 UserController的 Delete(int id) 方法。
d. Action分為[HttpGet]和[HttpPost]兩種,與HTTP的GET和POST方式對應。 即直接請求的URL只會匹配[HttpGet]方法,而未註明[HttpPost]的方法即默認為[HttpGet]. Post的Action一般會有一個Model參數,MVC會自動將表單里的數據按約定的規則填充到Model實體對象里。 這個約定的規則,就是表單的Name與屬性名稱有個對應規則。
3)MVC負責按上述規則將執行流程導入合適的Action中,即Controller的某個方法中。
4)Action中,可以直接返回字元串,輸出到瀏覽器, 也可以返回到ActionResult對象, 該對象指向一個View頁面,並且附帶了一些屬性作為傳遞數據的容器。
2、MVC中如何設置路由指定默認頁
MVC中怎麼設置默認頁,在webform中 只要右鍵設置起始頁就可以,但MVC中卻沒有這個功能,其實MVC更簡單
如下:
Login是控制器,Index 是動作 在全局Global.asax中改動下即可
這個是針對area的默認頁
namespaces:默認頁的命名空間
DataTokens:該area的鍵值對
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/306378",
defaults: new { controller = "Index", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MvcWeb.Areas.Members.Controllers" }
).DataTokens.Add("Area", "Members");
[MVC4]App_Start/RouteConfig 原內容
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/306378",
new { controller = "Login", action = "Index", id = UrlParameter.Optional }
);
3、MVC中Golbal配置多個routes.MapRoute有什麼作用
讀取不同的路由Url,實現不同類型的方法 ,程序先經過路由解析然後分配到特定的Controller 以及 Action 中 ,在網上搜一下路由的詳解,學好mvc首先要學好路由規則
4、關於MVC中多級文件夾路由設置問題
routes.MapRoute(
"test", // 路由名稱
"Admin/Manage/MemberManage/BaseInfo/306378",
new { controller = "MemberManage", action = "BaseInfo", id = UrlParameter.Optional }
);
比如你的請求是Admin/Manage/MemberManage/BaseInfo/1
它會在你定義好的route表裡找出匹配的,然後根據你定義的controller,action去查找視圖
[action]
/Controllers/MemberManageController - > BaseInfo
[view]
~/Views/{controller}/{action}.aspx
5、請教MVC中RouteCollection.RouteExistingFiles屬性的問題
RouteCollection.RouteExistingFiles屬性默認為false,該值指示 ASP.NET 路由操作是否應處理與現有文件匹配的URL。
可是我做了下面的測試,卻可以訪問到磁碟文件,請教原因:
用VS2010新建了一個MVC的程序,程序中不寫任何代碼,然後向解決方案中添加一個名為aa的文件夾,然後在這個文件夾中添加一個名為b.xml的xml文件(xml文件中的內容隨便寫點什麼).
運行程序後,在地址欄中輸入http://localhost:12448/aa/b.xml,可以訪問到這個xml文件的內容
6、MVC 路由重寫二級域名怎麼實現
你的設計思路錯了。
控制器是使用依賴注入方式來實現的,不要在控制器中使用構造函數。
這種情況可以改用過濾器來實現。
7、請教個基礎問題,MVC Route中的一語句
routes.Add(new Route("{action}/306378", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "", action = "", id = "" }),
Constraints = new RouteValueDictionary { { "id", @"\d+" } }
});
這是在Global中定義一個URL規則,相信已經有許多人用過,標紅的這句是添加一個id為數字時才匹配的約束,我的問題是 new RouteValueDictionary { { "id", @"\d+" } } 這句是啥語法 new Class{ {"", ""} }
這是RouteValueDictionary的構造方法:
public RouteValueDictionary();
public RouteValueDictionary(IDictionary<string, object> dictionary);
public RouteValueDictionary(object values);
protected RouteValueDictionary(SerializationInfo info, StreamingContext context);
8、asp.net mvc5中如何路由跳轉另一個路由並傳參?
//這是路由規則 可以默認用id 傳值
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/306378",
defaults: new { controller = "Login", action = "UserLogin", id = UrlParameter.Optional }
);
window.location.href = "/Load/Index" + '/' + 10; //這個是跳轉頁面 填你自己的,後面那個10 就是你要傳的參數值
在A2 那個控制器中 public ActionResult Index(string id) { }
寫一個參數 string id ;你就可以取到 那個值 10
9、asp.net MVC URL Routing問題 關於routes.MapRoute()方法的參數問題
必須要{controller}/{action}的,其他的參數不要求。你說的參數可以這么寫:
{controller}/{action}/{a}-{b}-{c}..... ,明白?另外最後一部分是倒著解析的,如:
規則{controller}/{action}/{a}-{b}-{c},一個url是 user/center/1-2-3-4,解析結果為controller=user,action=center,c=4,b=3,a=1-2;明白吧?
10、mvc路由接收URL數據的幾種方法
url:www.xxx.com/show/3
www.xxx.com/show?id=3
路由:
routes:MapRoute(
"test",
"show/306378",
new {controller="proct",action="show",id=urlParameter.Optional}
);
控制器類
public ActionResult show()
{
var id=RouteDate.Values["id"] ?? (Request.QueryString["id"] ?? String.Empty);
//或者使用ValueProvider,注意ValueProvider對參數大小寫有要求。
var id2=ValueProvider.GetValue("id").AttemptedValue ?? String.Empty
}