ASP.NET Core MVC (2)控制器

如何識別到Controller:

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

MVC中的View

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

Views/Shared/_Layout.cshtml

這個文件是全部視圖文件都會使用的模板,能夠經過修改這個文件修改全部視圖公共的部分。
打開該文件,裏面有一行以下htm

<title>@ViewData["Title"] - Movie App</title>

ViewData是一個字典類型的變量,能夠在控制器和視圖中使用,如上這行表示使用ViewData中名爲Title的值,這個Title是每一個頁面本身定義的,這樣就會根據不一樣頁面顯示不一樣的值,從這裏也能夠看出,每一個視圖先執行,而後執行共享的視圖。路由

ViewData

控制器中的數據如何傳遞給視圖顯示呢?
咱們這裏看個示例:將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>
相關文章
相關標籤/搜索