将控制器添加到ASP.NET Core MVC应用程序

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

  1. 在 Views 文件夹右键 → 添加 → 新建文件夹,命名 HelloWorld
  2. 右键 Views/HelloWorld → 添加 → 新建项
  3. 搜索: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)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注