ASP.NET Core MVC 控制器 + Razor 视图
本节演示改造 HelloWorldController,使用 Razor视图(.cshtml) 生成HTML返回客户端,不再在控制器硬编码字符串。
1. 修改控制器 Index 方法
Razor视图文件后缀为 .cshtml,可以混合C#代码与HTML。 原来Index直接返回字符串,替换代码:
public IActionResult Index()
{
return View();
}
Code language: PHP (php)
View()是控制器内置方法,用于调用视图模板生成HTML。 控制器动作方法一般返回IActionResult,而不是简单字符串。
2. 添加 Razor 视图 Index.cshtml
- 在
Views文件夹右键 → 添加 → 新建文件夹,命名HelloWorld - 右键
Views/HelloWorld→ 添加 → 新建项 - 搜索:Razor 视图,名称保持
Index.cshtml,点击添加
替换 Views/HelloWorld/Index.cshtml 全部内容:
@{
ViewData["Title"] = "Index";
}
<h2>Index</h2>
<p>Hello from our View Template!</p>
Code language: HTML, XML (xml)
访问地址:[https://localhost](https://localhost):xxxx/HelloWorld
return View()没有指定视图文件名,MVC会按约定自动查找:Views/HelloWorld/Index.cshtml
3. 布局页 _Layout.cshtml(全站共用页面框架)
菜单、页眉页脚统一放在布局文件:Views/Shared/_Layout.cshtml 布局模板可以统一定义网站HTML外壳,多个页面共用。 @RenderBody() 是占位符,子视图的内容会渲染到这个位置。
修改布局页示例
修改品牌链接:
<!-- 原 -->
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">MvcMovie</a>
<!-- 修改后 -->
<a class="navbar-brand" asp-controller="Movies" asp-action="Index">Movie App</a>
Code language: HTML, XML (xml)
把页面标题、页脚文字 MvcMovie 改为 北盟电影。
_ViewStart.cshtml
Views/_ViewStart.cshtml
@{
Layout = "_Layout";
}
Code language: JavaScript (javascript)
作用:默认给所有视图启用 _Layout.cshtml 布局。 可以修改 Layout 属性切换布局,设置 Layout=null 就不使用布局。
4. 控制器向视图传数据:ViewData
ViewData 是动态字典对象,可以存放任意数据,传递给Razor视图。 修改 HelloWorldController 的 Welcome 动作:
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult Welcome(string name, int numTimes = 1)
{
ViewData["Message"] = "Hello " + name;
ViewData["NumTimes"] = numTimes;
return View();
}
}
}
MVC模型绑定会自动从URL查询字符串读取参数
name、numTimes,绑定到方法入参。
新建视图 Views/HelloWorld/Welcome.cshtml
@{
ViewData["Title"] = "Welcome";
}
<h2>Welcome</h2>
<ul>
@for (int i = 0; i < (int)ViewData["NumTimes"]; i++)
{
<li>@ViewData["Message"]</li>
}
</ul>
Code language: PHP (php)
访问URL:
[https://localhost](https://localhost):xxxx/HelloWorld/Welcome?name=Rick&numtimes=4
Code language: JSON / JSON with Comments (json)
Previous: 将控制器添加到ASP.NET Core MVC应用程序
Next: 07-路由模板中使用标记替换