您的位置:首页 > 编程语言 > ASP

ASP.NET Core MVC入门——2

2020-04-18 18:16 1056 查看

如何识别到Controller:

asp.net core mvc是通过URL来识别请求中的控制器,默认URL路由逻辑是

/[Controller]/[ActionName]/[Parameters]

默认URL的路由格式在项目中的Startup.cs中有定义,ActionName表示控制器类中的方法。

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

如果URL 是 localhost:59191/HelloWorld,则表示对应访问HelloWorldController类的Index方法。
如果URL 是 localhost:59191/HelloWorld/Welcome,则表示对应访问HelloWorldController类的Welcome方法。

我们尝试修改Welcome方法如下

public string Welcome(string name, int numTimes = 1)
{
return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}

如果URL 是 localhost:59191/HelloWorld/Welcome?name=Money&numTimes=10,则会显示10次Money。

MVC中的View

1 在Views文件夹上右键,添加 > 新建文件夹,命名为HelloWorld。
2 右键HelloWorld文件夹,添加“视图”,取名为Index,则会生成一个Index.cshtml,这是一个Razor视图文件,Razor是一个类似html的可以用C#编写的文件类型,方便将数据模型和视图进行绑定使用。
3 Index.cshtml文件内容改为如下,

@{
ViewData["Title"] = "Index";
}

<h2>Index</h2>

<p>Hello from our View Template!</p>

4 将HelloWorldController中的index方法改为如下

public IActionResult Index()
{
return View();
}

5 此时,就可以再次运行,发现 localhost:59191/HelloWorld的页面是Index.cshtml中的效果。控制器中Index方法只有一条语句return View()。表示需要返回一个view视图类型来回复给用户。这里View()中没有指明使用哪个视图文件为空,asp.net的MVC会使用默认视图,即方法名称对应的视图,即HelloWorld目录下的index.cshtml文件。

Views/Shared/_Layout.cshtml

这个文件是所有视图文件都会使用的模板,可以通过修改这个文件修改所有视图公共的部分。
打开该文件,里面有一行如下

<title>@ViewData["Title"] - Movie App</title>

ViewData是一个字典类型的变量,可以在控制器和视图中使用,如上这行表示使用ViewData中名为Title的值,这个Title是每个页面自己定义的,这样就会根据不同页面显示不同的值,从这里也可以看出,每个视图先执行,然后执行共享的视图。

ViewData

控制器中的数据如何传递给视图显示呢?
我们这里看个示例:将HelloWorld中Welcome改为如下,有两个参数。通过ViewData成员变量传入Message和NumTimes

public IActionResult Welcome(string name, int numTimes = 1)
{
ViewData["Message"] = "Hello " + name;
ViewData["NumTimes"] = numTimes;

return View();
}

如果通过URL为 localhost:59191/HelloWorld/Welcome?name=Money&numTimes=10,则name和numTimes自动映射到参数上。这里没有大小写之分
创建Welcome视图,其中代码如下,通过ViewData使用Message和NumTimes。@表示其后使用C#语法。

@{
ViewData["Title"] = "Welcome";
}

<h2>Welcome</h2>

<ul>
@for (int i = 0; i < (int)ViewData["NumTimes"]; i++)
{
<li>@ViewData["Message"]</li>
}
</ul>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: