路由樣式的 id 區段

ASP.NET Core Web 應用開發–使用 MVC 框架 / PART II MVC 的細節 / 控制器與路由 / 路由樣式的 id 區段

接續「控制器與路由」一節的討論,回到路由樣式的設定,進一步來看其中的 id 參數:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

參數 id 緊接著一個「?」表示這是一個選擇性的區段,如果比對找不到這個區段則直接忽略。

考慮以下的url內容:

http://localhost:52324/Home/HelloMessage/356

其中最後一個區段是數值356,因此對應至參數 id ,這個值以id為其識別名稱,隨著要求傳送回伺服器,接下來就可以在 Home 控制器中的 HelloMessage 動作方法裏,透過以下的語法取得這個 id 值:

RouteData.Values["id"]

這一行會傳回url中最後一個區段值356。

現在於 HomeController.cs 控制器檔案中,新增 HelloMessage 動作方法,設計以下的內容:

public ActionResult HelloMessage()
{
    ViewBag.cid = RouteData.Values["id"];
    return View();
}

其中取得id值並且將其設定給ViewBag的cid自訂屬性,接下來調整HelloMessage.cshtml這個檔案內容:

<div>
    <h1>Home/HelloMessage/@ViewBag.cid</h1>
</div>

在檢視檔案中,透過 @ViewBag取出cid屬性值,先來看直接瀏覽的結果:

網址列因為沒有最後的id區段,因此@ViewBag.cid是空值。

現在於最後加上任意數字,令其對應至id,重新載入得到以下的結果:

從結果畫面可以看到其中順利取出id參數值。

在對應的動作方法中,直接指定同名參數(id)亦可以取得 id 區段值,以下進一步修改 HelloMessage 動作方法,設定一個 id 參數如下:

public ActionResult HelloMessage(int id)
{
ViewBag.cid = RouteData.Values["id"];
ViewBag.pcid = id;
return View();
}

其中將id參數設定給另外一組ViewBag .pcid屬性,現在進一步調整HelloMessage.cshtml檢視的內容:

<div>
    <h1>Home/HelloMessage/@ViewBag.cid</h1>
    <h1>Home/HelloMessage/@ViewBag.pcid</h1>
</div>

其中分別列舉@ViewBag.cid與@ViewBag.pcid兩個值,現在重新瀏覽網頁如下:

從紅色箭頭處開始,指定最後一個區段的值為1217,這個值被傳入id數,透過ViewBag.pcid屬性,顯示在最後回傳的網頁上。

沒有留言: