ASP.NET Core MVC入門——2

如何識別到Controller:

asp.net core mvc是通過URL來識別請求中的控制器,默認URL路由邏輯是
/[Controller]/[ActionName]/[Parameters]
默認URL的路由格式在項目中的Startup.cs中有定義,ActionName表示控制器類中的方法。

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方法。

我們嘗試修改Welcome方法如下

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。

MVC中的View

1 在Views文件夾上右鍵,添加 > 新建文件夾,命名爲HelloWorld。
2 右鍵HelloWorld文件夾,添加“視圖”,取名爲Index,則會生成一個Index.cshtml,這是一個Razor視圖文件,Razor是一個類似html的可以用C#編寫的文件類型,方便將數據模型和視圖進行綁定使用。
3 Index.cshtml文件內容改爲如下,

@{
    ViewData["Title"] = "Index";
}

<h2>Index</h2>

<p>Hello from our View Template!</p>

4 將HelloWorldController中的index方法改爲如下

public IActionResult Index()
{
    return View();
}

5 此時,就可以再次運行,發現 localhost:59191/HelloWorld的頁面是Index.cshtml中的效果。控制器中Index方法只有一條語句return View()。表示需要返回一個view視圖類型來回復給用戶。這裏View()中沒有指明使用哪個視圖文件爲空,asp.net的MVC會使用默認視圖,即方法名稱對應的視圖,即HelloWorld目錄下的index.cshtml文件。

Views/Shared/_Layout.cshtml

這個文件是所有視圖文件都會使用的模板,可以通過修改這個文件修改所有視圖公共的部分。
打開該文件,裏面有一行如下

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

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

ViewData

控制器中的數據如何傳遞給視圖顯示呢?
我們這裏看個示例:將HelloWorld中Welcome改爲如下,有兩個參數。通過ViewData成員變量傳入Message和NumTimes

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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章