asp.net core mvc是經過URL來識別請求中的控制器,默認URL路由邏輯是/[Controller]/[ActionName]/[Parameters]
默認URL的路由格式在項目中的Startup.cs中有定義,ActionName表示控制器類中的方法。html
app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });
若是URL 是 localhost:59191/HelloWorld,則表示對應訪問HelloWorldController類的Index方法。
若是URL 是 localhost:59191/HelloWorld/Welcome,則表示對應訪問HelloWorldController類的Welcome方法。mvc
咱們嘗試修改Welcome方法以下app
public string Welcome(string name, int numTimes = 1) { return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}"); }
若是URL 是 localhost:59191/HelloWorld/Welcome?name=Money&numTimes=10,則會顯示10次Money。asp.net
1 在Views文件夾上右鍵,添加 > 新建文件夾,命名爲HelloWorld。
2 右鍵HelloWorld文件夾,添加「視圖」,取名爲Index,則會生成一個Index.cshtml,這是一個Razor視圖文件,Razor是一個相似html的能夠用C#編寫的文件類型,方便將數據模型和視圖進行綁定使用。
3 Index.cshtml文件內容改成以下,ide
@{ ViewData["Title"] = "Index"; } <h2>Index</h2> <p>Hello from our View Template!</p>
4 將HelloWorldController中的index方法改成以下.net
public IActionResult Index() { return View(); }
5 此時,就能夠再次運行,發現 localhost:59191/HelloWorld的頁面是Index.cshtml中的效果。控制器中Index方法只有一條語句return View()。表示須要返回一個view視圖類型來回復給用戶。這裏View()中沒有指明使用哪一個視圖文件爲空,asp.net的MVC會使用默認視圖,即方法名稱對應的視圖,即HelloWorld目錄下的index.cshtml文件。code
這個文件是全部視圖文件都會使用的模板,能夠經過修改這個文件修改全部視圖公共的部分。
打開該文件,裏面有一行以下htm
<title>@ViewData["Title"] - Movie App</title>
ViewData是一個字典類型的變量,能夠在控制器和視圖中使用,如上這行表示使用ViewData中名爲Title的值,這個Title是每一個頁面本身定義的,這樣就會根據不一樣頁面顯示不一樣的值,從這裏也能夠看出,每一個視圖先執行,而後執行共享的視圖。路由
控制器中的數據如何傳遞給視圖顯示呢?
咱們這裏看個示例:將HelloWorld中Welcome改成以下,有兩個參數。經過ViewData成員變量傳入Message和NumTimesstring
public IActionResult Welcome(string name, int numTimes = 1) { ViewData["Message"] = "Hello " + name; ViewData["NumTimes"] = numTimes; return View(); }
若是經過URL爲 localhost:59191/HelloWorld/Welcome?name=Money&numTimes=10,則name和numTimes自動映射到參數上。這裏沒有大小寫之分。
建立Welcome視圖,其中代碼以下,經過ViewData使用Message和NumTimes。@表示其後使用C#語法。
@{ ViewData["Title"] = "Welcome"; } <h2>Welcome</h2> <ul> @for (int i = 0; i < (int)ViewData["NumTimes"]; i++) { <li>@ViewData["Message"]</li> } </ul>