https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-mvc-app/adding-model?view=aspnetcore-3.1&tabs=visual-studio (通過代碼驗證,步驟均可行)html
以前的示例中用過viewdata字典對象來傳輸控制器中的數據給視圖使用。
MVC也提供了直接傳輸強類型對象給視圖的方法。這樣編譯器能夠在編譯時期就對類型作檢查。mvc
控制器中傳出數據模型app
能夠看看Controllers/MoviesController.cs文件異步
// GET: Movies/Details/5 public async Task<IActionResult> Details(int? id) { if (id == null) { return NotFound(); } var movie = await _context.Movie .FirstOrDefaultAsync(m => m.Id == id); if (movie == null) { return NotFound(); } return View(movie); }
例如 https://localhost:51919/movies/details/1 控制器爲moviews,行爲方法爲details,參數爲1,也就是id=1。也能夠使用以下字符串查詢的url : https://localhost:51919/movies/details?id=1 ,也能達到同樣的效果。async
FirstOrDefaultAsync
中是lambda表達式,表示選出知足id的movie實體對象。 await表示異步等待。return View(movie)
將知足條件的movie對象傳給view視圖。ide
視圖中使用數據模型對象visual-studio
查看Views/Movies/Details.cshtml ,代碼以下url
@model MvcMovie.Models.Movie @{ ViewData["Title"] = "Details"; } <h1>Details</h1> <div> <h4>Movie</h4> <hr /> <dl class="row"> <dt class="col-sm-2"> @Html.DisplayNameFor(model => model.Title) </dt> <dd class="col-sm-10"> @Html.DisplayFor(model => model.Title) </dd> <dt class="col-sm-2"> @Html.DisplayNameFor(model => model.ReleaseDate) </dt> <dd class="col-sm-10"> @Html.DisplayFor(model => model.ReleaseDate) </dd> <dt class="col-sm-2"> @Html.DisplayNameFor(model => model.Genre) </dt> <dd class="col-sm-10"> @Html.DisplayFor(model => model.Genre) </dd> <dt class="col-sm-2"> @Html.DisplayNameFor(model => model.Price) </dt> <dd class="col-sm-10"> @Html.DisplayFor(model => model.Price) </dd> </dl> </div> <div> <a asp-action="Edit" asp-route-id="@Model.Id">Edit</a> | <a asp-action="Index">Back to List</a> </div>
第一行@model語句表示視圖須要MvcMovie.Models.Movie類型的對象。而後就能夠在視圖頁面中經過@Model.Id等方式直接使用對象,也能夠經過@Html.DisplayFor(model=>model.Price)訪問對象數據,這裏小寫的model表示一個lambda參數,實際上傳入的數據就對象是Model。code
控制器傳出列表
上面是經過return view的方式返回一個movie對象給view的Model屬性,而後哦經過Model屬性來訪問這個數據。
若是控制器返回的是一個List類型,該如何處理呢?
查看控制器中的index方法,這是一個返回列表的方法,固然也是用的異步返回。htm
// GET: Movies public async Task<IActionResult> Index() { return View(await _context.Movie.ToListAsync()); }
視圖傳入列表
Index.cshtml
中能夠看到 @model IEnumerable<MvcMovie.Models.Movie>
這行語句表示接收的類型爲一個實現了接口爲IEnumerable。而List就是一個實現了枚舉接口的類。因此在視圖頁面中能夠經過循環來逐個訪問對象列表中的對象。
@foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.ReleaseDate) </td> <td> @Html.DisplayFor(modelItem => item.Genre) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> <a asp-action="Edit" asp-route-id="@item.Id">Edit</a> | <a asp-action="Details" asp-route-id="@item.Id">Details</a> | <a asp-action="Delete" asp-route-id="@item.Id">Delete</a> </td> </tr>