在本部分中,将修改 helloworldcontroller 类,进而使用 razor 视图文件来顺利封装为客户端生成 html 响应的过程。

当前,index 方法返回带有在控制器类中硬编码的消息的字符串。 在 helloworldcontroller 类中,将 index 方法替换为以下代码:

 

public iactionresult index()
{
return view();
}

 

 

上面的代码调用控制器的 view 方法。 它使用视图模板来生成 html 响应。 控制器方法(亦称为“操作方法”,如上面的 index 方法)
通常返回 iactionresult(或派生自 actionresult 的类),而不是 string 等类型。

 

 

添加视图

右键单击“视图”文件夹,然后单击“添加”>“新文件夹”,并将文件夹命名为“helloworld”。
右键单击“views/helloworld”文件夹,然后单击“添加”>“新项”。
在“添加新项 – mvcmovie”对话框中
在右上角的搜索框中,输入“视图”
选择“razor 视图”
保持“名称”框的值:index.cshtml。
选择“添加”

 

使用以下内容替换 razor 视图文件 views/helloworld/index.cshtml 的内容:

@{
viewdata[“title”] = “index”;
}

<h2>index</h2>

<p>hello from our view template!</p>

 

 

导航到 https://localhost:xxxx/helloworld。 helloworldcontroller 中的 index 方法作用不大;它运行 return view();
语句,指定此方法应使用视图模板文件来呈现对浏览器的响应。 因为没有显式指定视图模板文件的名称,所以 mvc 默认使用
/views/helloworld 文件夹中的 index.cshtml 视图文件。 下面图片显示了视图中硬编码的 字符串“hello from our view template!”

更改视图和布局页面

选择菜单链接(“mvcmovie”、“首页”和“隐私”)。 每页显示相同的菜单布局。 菜单布局是在 views/shared/_layout.cshtml 文件中实现的。
打开 views/shared/_layout.cshtml 文件。
布局模板使你能够在一个位置指定网站的 html 容器布局,然后将它应用到网站中的多个页面。 查找 @renderbody() 行。
renderbody 是显示创建的所有特定于视图的页面的占位符,已包装在布局页面中。 例如,如果选择“隐私”链接
,views/home/privacy.cshtml 视图将在 renderbody 方法中呈现。

更改布局文件中的标题、页脚和菜单链接
在标题和页脚元素中,将 mvcmovie 更改为 movie app。
将定位点元素

<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>

在前面的标记中,省略了 asp-area 定位点标记帮助程序属性,因为此应用未使用区域。
说明:movies 控制器尚未实现。 此时,movie app 链接不起作用。

 

完整的 helloworldcontroller.cs 文件如下所示:

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();
}
}
}

 

 

创建一个名为 views/helloworld/welcome.cshtml 的 welcome 视图模板。
使用以下内容替换 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>

 

 

保存更改并浏览到以下 url:

https://localhost:xxxx/helloworld/welcome?name=rick&numtimes=4

 

数据取自 url,并传递给使用 mvc 模型绑定器的控制器。 控制器将数据打包到 viewdata 字典中,并将该对象传递给视图。
然后,视图将数据作为 html 呈现给浏览器。
在上面的示例中,我们使用 viewdata 字典将数据从控制器传递给视图。